2009-01-17 2 views
6

나는 JNDI를 사용하여 ActiveMQ로 연결하기 만하면됩니다. JNDI를 통해 ActiveMQ 사용


나는 'example.A'라는 이름

  1. 대기열이있다.

  2. ActiveMQ documentation touching JNDI에 따르면 JNDI를 통해 ConectionFactories와 Queues (Topics)를 사용하려면 jndi.properties 파일을 클래스 경로에 배치해야합니다. 내가 알고 있듯이 activeMQ 클래스 경로는 기본적으로 % activemq %/conf 디렉토리입니다. 나는 그것을 바꾸지 않았다. 그래서 나는 나의 큐에 대해이 속성이 있습니다

    queue.MyQueue = example.A 나는 다음과 같이 JNDI 사용 ActiveMQ를위한 자바 클라이언트 클래스를 생성 한

  3. :

    Properties jndiParameters = new Properties() ; 
        jndiParameters.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory"); 
        jndiParameters.put(Context.PROVIDER_URL, "tcp://localhost:61616"); 
        Context context = new InitialContext(jndiParameters); 
        ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory"); 
        Queue queue = (Queue) context.lookup("MyQueue"); 
    

을 하지만 그것은 내 큐를 찾을 수 없습니다 예외를 throw합니다 : javax.naming.NameNotFoundException : MyQueue

내 실수는 어디 있습니까?

+0

비슷한 문제가 있습니다. jndi url 및 연결 팩토리를 구성 할 수 있지만 추가 속성을 제공 할 수 없습니다. 이 방법은 큐 엔드 포인트가 정의되지 않은 것 같습니다. dynamicQueue/Test를 사용하면 작동하지만 정적으로 명명 된 대상을 처리 할 수 ​​있어야합니까? – eckes

답변

5

속성은 명시 적으로 속성을 만들고 InitialContext 생성자에 전달하는 것이 문제입니다. 이는 클래스 경로의 jndi.properties가 읽히지 않음을 의미합니다.

귀하의 코드가 있어야한다 무언가 같이 :

Context context = new InitialContext(); 
ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory"); 
Queue queue = (Queue) context.lookup("MyQueue"); 
1

당신은 정적 속성을 설정할 수 있습니다뿐만 아니라 같은 파일에서 검색 : 이것은만큼 당신이 정적을 설정 한대로 작동

InputStream is = getClass().getResourceAsStream("/my.jndi.properties"); 
    Properties jndiParameters = new Properties(); 
    jndiParameters.load(is); 
    jndiParameters.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory"); 
    jndiParameters.put(Context.PROVIDER_URL, "tcp://localhost:61616"); 
    Context ctx = new InitialContext(jndiParameters); 
... 

소품을로드 한 후 예를 들어 다른 곳에서 공급자 URL을로드하는 경우 유용합니다.