2012-03-21 4 views
1

私は、その目的を達成するためにJMSの宛先を調べる必要のあるSpringアプリケーションを持っています。私たちが開発環境かシステムテスト環境かに応じて、異なるJMS実装を使用します。 (のWebLogicでのシステムテストでのOracle AQは、Apache ActiveMQのはdevに関する突堤で展開)SpringからactiveMQの宛先を検索する

は、私はActiveMQのを設定し、それがうまく展開している、それはそれはactivemq.xmlファイル内の目的地です作成します。

<destinations> 
    <queue physicalName="handlersDest" /> 
    <topic physicalName="notificationsDest" /> 
</destinations> 

I私のハンドラを起動する(春)アプリケーション、それは目的地のルックアップを行います。

<jee:jndi-lookup id="handlersDest" jndi-name="$handlersDest"> 
    <jee:environment> 
     java.naming.factory.initial = ${jndi.jms.naming.factory.initial} 
     java.naming.provider.url = ${jndi.jms.naming.url} 
     queue.handlersDest = handlersDest 
    </jee:environment> 
</jee:jndi-lookup> 

私の問題は、私はそれを動作させるために環境に次の行を追加することが必要であることである。

queue.handlersDest = handlersDest 

これはActiveMQの初期コンテキストに "handlersDest"と呼ばれる宛先があり、それがキュー名 "handlersDest"の下に登録されていることを確認していることを知っていますが、なぜこれを行う必要があるのか​​分かりませんクライアントアプリケーション?

これらのJNDI名は、activemq.xmlまたはactivemqをデプロイするアプリケーションのどこか他の場所で事前定義できませんか。

答えて

0

答えはありません。アクティブなMQの初期コンテキストでは、宛先のjndi名を事前に定義することはできません。

jndiの設定をプロパティとして設定できるようにして、jndiの設定を必要としない別のプロバイダを使用するときに空白に設定できるようにすることで、この問題を解決しました。例えば

<jee:jndi-lookup id="handlersDest" jndi-name="$handlersDest"> 
    <jee:environment> 
     java.naming.factory.initial = ${jndi.jms.naming.factory.initial} 
     java.naming.provider.url = ${jndi.jms.naming.url} 
     queue.handlersDest = handlersDest 
    </jee:environment> 
</jee:jndi-lookup> 

になる:

<jee:jndi-lookup id="handlersDest" jndi-name="$handlersDest"> 
    <jee:environment> 
     java.naming.factory.initial = ${jndi.jms.naming.factory.initial} 
     java.naming.provider.url = ${jndi.jms.naming.url} 
     ${jndi.config} 
    </jee:environment> 
</jee:jndi-lookup> 

アクティブMQと展開されたとき、私は "queue.handlersDest = handlersDest" にjndi.configプロパティを指定することができ、この方法。しかし、必要がない場合は値を空白のままにしておくことができます。

もう1つの答えは、active-mqs inital contextを使用せず、active-mqからの宛先を含むように設定できるコンテナによって提供される初期コンテキストを使用することです。

関連する問題