繁体   English   中英

使用Tomcat6的JPOS Q2初始化

[英]JPOS Q2 initialization using Tomcat6

我们在Q2使用jpos,并将其中一个webapp部署在tomcat6上,这一切都很好。 现在我们必须使用q2东西实现另一个jpos应用程序,但是当我们将其部署在同一tomcat6服务器上时,它没有加载对象,例如QMUXChannelAdaptor等。我注意到tomcat输出日志中出现以下异常

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可用,或者不只是创建新的MBeanServer。

现在的问题是我不确定我正在处理什么,也不知道MBeanServer是做什么的,因为我的背景是.Net。 所以问题是; 在生产中进行上述变更是否安全?

Q2是一个独立的应用程序,尽管它可以嵌入其他应用程序中,但是99%的部署和主要开发重点都针对独立安装程序,因此,您可能会发现(像以前一样)在Windows 2000中运行它时遇到一些困难。容器。

也就是说,我们了解您的问题,并已在jPOS 1.9.9-SNAPSHOT中解决了该问题,有关详细信息,请参见2dbd8deChangeLog

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM