2012-01-23 9 views
0

私はJMX接続を介してActiveMQからデータを取得する必要がある春ベースのWebアプリケーションを持っています。 ActiveMQからさまざまなMBean属性を取得するために、私はMBeanServerConnectionFactoryBean(春)を使用しています。JMX for Spring:スレッドセーフであるMBeanServerConnectionFactoryBean

私はメンバー変数としてMBeanServerConnectionFactoryBeanを1つだけ持っています。これはデータの取得に使用されます。複数のリクエスト/スレッドが同時に発生する場合は、何か問題がありますか?競争条件はありますか?

コードをスレッドセーフにする最良の方法を提案してください。

答えて

1

スプリングFactoryBeanオブジェクトはコードから直接使用するためのものではなく、Springのコンフィグレーションで使用されるはずです。したがって、これらは1回のみ実行されるように設計されています。

MBeanServerConnectionFactoryBeanなどを使用する場合は、それらを作成し、設定し、使用し、作成するオブジェクトを取得するたびに破棄する必要があります。それらは最も確かにではなく、スレッドセーフです。

デザインは意図したとおりに行い、Springの設定で使用してください。

+0

返信いただきありがとうございます。 当初、私はSpringの設定でMBeanServerConnectionFactoryBeanを作っていました。しかし、アプリケーションの起動時に、ActiveMQ(mBean Server)への接続を試みます。 ActiveMQサーバがオフの場合、接続できません。 ActiveMQサーバーを起動しても、JMX接続を確立できません。 MBeanServerConnectionFactoryBeanをコードに移動し、リクエストが入ったときに接続を確立しようとするオプションはありませんでした。 これは、接続のメンバー変数があるため、スレッドセーフに関する質問につながります。 助けてください。 – karan1001

+0

@ user736492: 'MBeanServerConnectionFactoryBean'のドキュメントをより詳しく読んでください。起動時に行うのではなく、必要になるまで接続の試行を延期するオプションがあります。 – skaffman

+0

はい、起動時ではなく、初めて使用するときに接続を作成するオプションがあります。しかし、これはおそらく最初に接続を試みるだけです(1回限り)。その時点でactiveMQサーバがオフの場合に接続を再試行しようとしません。したがって、おそらくブラウザからの各リクエストの接続を再試行するという私の問題は解決されません。 – karan1001

関連する問題