Q2
tomcat6にデプロイされたwebappの1つでjposを使用していますが、すべて問題ありませんでした。ここで、q2 のものを使用して別の jpos アプリケーションを実装する必要がありますが、同じ tomcat6 サーバーにデプロイしたときに、オブジェクトなどをロードしませんでした。Tomcat のQMUX
出力ChannelAdaptor
ログに次の例外があることに気付きました
javax.management.InstanceAlreadyExistsException: Q2:type=system,service=loader
at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:453)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.internal_addObject(DefaultMBeanServerInterceptor.java:1484)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:963)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:917)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:312)
at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:482)
at org.jpos.q2.Q2.run(Q2.java:150)
at java.lang.Thread.run(Thread.java:662)
例外のソースがクラスであることがわかります。ソースをダウンロードしたときに、次のコードの一部がメソッドQ2
にあることに気付きました。run
ArrayList mbeanServerList = MBeanServerFactory.findMBeanServer(null);
if (mbeanServerList.isEmpty()) {
server = MBeanServerFactory.createMBeanServer (JMX_NAME);
} else {
server = (MBeanServer) mbeanServerList.get(0);
}
そこで、上記のコードを次のコード (コメント付きのコードに注意) に置き換えて、プロジェクトに jpos ソース コードを含めることにしました。すべてが期待どおりに機能し始めます。
//ArrayList mbeanServerList = MBeanServerFactory.findMBeanServer(null);
//if (mbeanServerList.isEmpty()) {
server = MBeanServerFactory.createMBeanServer (JMX_NAME);
//} else {
// server = (MBeanServer) mbeanServerList.get(0);
//}
変更されたコードでは、MBeanServer が既に利用可能であるか、単に新しいものを作成するだけであるかをテストしていないことに注意してください。
質問
ここでの問題は、私のバックグラウンドが .Net であるため、MBeanServer が何のためにあるのかわからず、何を扱っているのか正確にわからないことです。問題は次のとおりです。上記の変更を本番環境に適用しても安全ですか?