[解決済み] 復旧しようとする宛先のJMSメッセージリスナー起動者のセットアップに失敗しました。
2022-02-10 02:05:55
質問
アプリケーションで統合テストを実行しているとき、ある統合テストのフェイルセーフテストレポートに以下のようなエラーメッセージが表示されます。
listener.DefaultMessageListenerContainer,WARN,Setup of JMS message listener invoker failed for destination 'jms/myapp.OneWorker' - trying to recover. Cause: Destination [jms/myapp.OneWorker] not found in JNDI; nested exception is javax.naming.NameNotFoundException: jms/myapp.OneWorker
以下は、私の設定の詳細です。
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">
org.apache.activemq.jndi.ActiveMQInitialContextFactory</prop>
<prop key="java.naming.provider.url">vm://localhost:0</prop>
<prop key="java.naming.security.principal">system</prop>
<prop key="java.naming.security.credentials">system</prop>
</props>
</property>
</bean>
<bean id="jndiQueueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate" ref="jndiTemplate" />
<property name="jndiName" value="jmsFactory" />
</bean>
<bean id="queueConnectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="jndiQueueConnectionFactory" />
<property name="sessionCacheSize" value="1" />
</bean>
<bean id="destinationResolver"
class="org.springframework.jms.support.destination.JndiDestinationResolver">
<property name="jndiTemplate" ref="jndiTemplate" />
<property name="cache" value="true" />
<property name="fallbackToDynamicDestination" value="false" />
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="queueConnectionFactory" />
<property name="destinationResolver" ref="destinationResolver" />
<property name="pubSubDomain" value="true" />
</bean>
<bean id="workerOneListener" class="com.org.myapp.workflow.WorkerOne">
<property name="workflowManager" ref="workflowManagerImpl" />
</bean>
<jms:listener-container connection-factory="queueConnectionFactory"
destination-resolver="destinationResolver" concurrency="3">
<jms:listener destination="jms/myapp.OneWorker" ref="workerOneListener" />
<jms:listener destination="jms/myapp.TwoWorker" ref="workerOneListener" />
<jms:listener destination="jms/myapp.ThreeWorker" ref="workerOneListener" />
</jms:listener-container>
統合テストには、spring アプリケーションのコンテキストを作成する基底クラスがあり、モジュール内の他のすべての統合テストによって共有されています。
デバッグレベルのロギングを有効にしたところ、以下のようなエラーメッセージが表示されました。
2014-01-29 11:13:24,connection.CachingConnectionFactory,DEBUG,Closing cached Session: ActiveMQSession {id=ID:CHN03876623-56121-1390973978321-2:0:70,started=true}
2014-01-29 11:13:24,connection.CachingConnectionFactory,DEBUG,Closing cached Session: ActiveMQSession {id=ID:CHN03876623-56121-1390973978321-2:0:70,started=true}
2014-01-29 11:13:24,connection.CachingConnectionFactory,DEBUG,Creating cached JMS Session for mode 1: ActiveMQSession {id=ID:CHN03876623-56121-1390973978321-2:0:71,started=true}
2014-01-29 11:13:24,jndi.JndiTemplate,DEBUG,Looking up JNDI object with name [jms/myapp.OneWorker]
2014-01-29 11:13:24,destination.JndiDestinationResolver,DEBUG,Destination [jms/myapp.OneWorker] not found in JNDI
javax.naming.NameNotFoundException: jms/myapp.OneWorker
at org.apache.activemq.jndi.ReadOnlyContext.lookup(ReadOnlyContext.java:225)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:154)
at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:179)
at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95)
at org.springframework.jms.support.destination.JndiDestinationResolver.resolveDestinationName(JndiDestinationResolver.java:111)
at org.springframework.jms.support.destination.JmsDestinationAccessor.resolveDestinationName(JmsDestinationAccessor.java:100)
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.createListenerConsumer(AbstractPollingMessageListenerContainer.java:221)
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.initResourcesIfNecessary(DefaultMessageListenerContainer.java:1081)
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1058)
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1050)
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947)
at java.lang.Thread.run(Thread.java:662)
このログメッセージは何度も何度も無限に繰り返され、他の2つのワーカーでも同じように繰り返されます。そして、この時点でビルドがハングアップしてしまいます。私は
unitils
フレームワークを使用し、Spring コンテキストを作成します。
@SpringApplicationContext
を、私の基本統合テスト・クラスで使用します。私はどこに間違っているのでしょうか?
どうすればいいですか?
これが問題だったのかどうかはわかりませんが、私はこの方法で問題を解決しました。
使用方法
@SpringApplicationContext
複数のspring xmlファイルがロードされており、最後にロードされたspring xmlファイルの1つが、他のコンテキストのxmlに必要ないくつかのクラスを除外しており、それらのクラスを除いてコンテキストが再ロードされました。
また、いくつかのspring xmlは、コンテキストファイルのリストで
@SpringApplicationContext
冗長な部分を削除し、不要なspring xmlやその中のいくつかのbeanを並べ替えたり削除したりしました。そして、それはうまくいきました。
関連
-
[解決済み】自動配線された依存関係のインジェクションに失敗しました。
-
[解決済み] <mvc:default-servlet-handler />の必要性と用途は何ですか?
-
自動配線された依存関係のインジェクションに失敗する; 自動インジェクションに失敗する問題
-
SpringトランザクションとMySQLトランザクション詳細インタビュー
-
互換性のない型.Found:'int',required:'java.lang.String'.
-
[解決済み] java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log
-
[解決済み】Spring RestTemplateリクエストに "Accept: "ヘッダーを設定する方法は?
-
[解決済み】IntelliJから実行するときにSpring Bootプロファイルを有効にするにはどうすればよいですか?
-
[解決済み] サーブレットにおける <mvc:annotation-driven /> と <context:annotation-config /> の違いは何ですか?
-
[解決済み] YAMLを使ったSpring @PropertySource
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】自動配線された依存関係のインジェクションに失敗しました。
-
[解決済み] Spring Hibernate - 現在のスレッドのトランザクション同期セッションを取得できませんでした。
-
[解決済み] SecurityContextにAuthenticationオブジェクトが見つかりませんでした - Spring 3.2.2
-
[解決済み] org.hibernate.AnnotationException: エンティティに識別子が指定されていません - たとえそれが
-
java.sql.SQLException を解決します。ユーザー 'root'@'localhost' (パスワード: YES を使用) のためのアクセスが拒否されました。
-
SpringBootで'Application'を実行中にエラーが発生しました。コマンドラインが長すぎるため、コマンドラインを短くしてください。
-
Springフレームワークを使用したアイデアで、コンテキストの初期化中に例外が発生し、リフレッシュの試みがキャンセルされる問題
-
[解決済み】ビーン初期化完了後にメソッドを呼び出すには?
-
[解決済み] スコープ("prototype")ビーンスコープで新しいビーンが作成されない
-
[解決済み] Spring Frameworkにおける依存性注入と制御の逆転とは?