7

JNDIを使用してActiveMQに接続するだけで作成しようとしています。


私は持っています

  1. 'example.A'という名前のキュー。

  2. JNDIに触れているActiveMQのドキュメントによると、JNDIを介してConectionFactories and Queues(Topics)を使用する場合は、クラスパスにjndi.propertiesファイルを配置する必要があります。私が理解しているように、activeMQクラスパスはデフォルトで%activemq%/confディレクトリです。私はそれを変更していません。だから私は私のキューにこのプロパティを持っています:

    queue.MyQueue = example.A

  3. 以下のように、JNDIを使用するActiveMQ用のJavaクライアントクラスを作成しました。

        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");
    

しかし、キューが見つからないため、例外がスローされます:javax.naming.NameNotFoundException:MyQueue

私の間違いはどこにありますか?

4

2 に答える 2

6

問題は、プロパティを明示的に作成し、それらを InitialContext コンストラクターに渡していることです。これは、クラス パスの jndi.properties が読み取られないことを意味します。

コードは次のようになります。

Context context = new InitialContext();
ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory");
Queue queue = (Queue) context.lookup("MyQueue");
于 2009-01-17T22:20:25.973 に答える
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をロードする場合に役立ちます。

于 2011-11-18T00:43:54.377 に答える