javax/management/MBeanServer加载程序约束违规问题
问题描述:
我试图将应用程序从JBoss-4.0.4.GA迁移到wildfly-10.1.0.Final。我遇到了JMX的问题。javax/management/MBeanServer加载程序约束违规问题
在应用程序的启动时,我发现了以下内容:
10:58:02,689 WARN [org.jboss.modules] (ServerService Thread Pool -- 90) Failed to define class javax.management.MBeanServer in Module "com.xor.genesis:main" from local module loader @1c2c22f3 (finder: local module finder @18e8568 (roots: /home/user/wildfly-10.1.0.Final/modules,/home/user/wildfly-10.1.0.Final/modules/system/layers/base)): java.lang.LinkageError: Failed to link javax/management/MBeanServer (Module "com.xor.genesis:main" from local module loader @1c2c22f3 (finder: local module finder @18e8568 (roots: /home/chaos1/wildfly-10.1.0.Final/modules,/home/chaos1/wildfly-10.1.0.Final/modules/system/layers/base))): loader constraint violation: loader (instance of org/jboss/modules/ModuleClassLoader) previously initiated loading for a different type with name "javax/management/MBeanServer"
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:446)
at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:274)
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:78)
at org.jboss.modules.Module.loadModuleClass(Module.java:606)
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93)
at com.xor.genesis.core.jmx.framework.ApplicationMBeanManager.registerMBean(ApplicationMBeanManager.java:37)
at com.xor.genesis.cgo.listeners.CGOApplicationListener.registerApplicationLogger(CGOApplicationListener.java:161)
at com.xor.genesis.cgo.listeners.CGOApplicationListener.initMBeans(CGOApplicationListener.java:112)
at com.xor.genesis.cgo.listeners.CGOApplicationListener.contextInitialized(CGOApplicationListener.java:59)
at io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:187)
at io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:200)
at io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:171)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:234)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:100)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:82)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
at org.jboss.threads.JBossThread.run(JBossThread.java:320)
要在代码级更精确的下面的行是生产上述异常:
MBeanServer server = java.lang.management.ManagementFactory.getPlatformMBeanServer();
我创建自己的模块与所需的罐子清单。我没有修改野蝇内的客户端库。
你有什么想法可以解决这个问题吗?
感谢, 阿纳托利
答
这是错误消息的有趣的部分:
装载机约束冲突:装载机(的 组织/ JBoss的/模块实例/ ModuleClassLoader)先前启动加载的 不同类型的名称为“javax/management/MBeanServer”
潜在问题解释为here更详细。本文的结论是:
在简单的话,可能会出现链接错误,如果两个不同的类 彼此互动,并在此互动类是指 类型具有相同的符号名称但不同的类的对象。
不同的类对象来源于类通过不同的类加载器加载的事实,因为每个类都由它的FQN和(!)加载它的类加载器来标识。
请检查您的类路径中是否存在javax/management/MBeanServer的多个实例(位于Wildfly/JBoss的模块目录中,甚至在您的部署中)。
似乎与MBeanServer.class在类路径中的存在重复项有关。 – chaos