java.lang.noclassdeffounderror:链接失败在JBoss7.1启动时

j8ag8udp  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(395)

我正在尝试将我的应用程序从JBoss6.4迁移到7.1。
在启动服务器时,我得到以下警告:

  1. 2020-11-16 10:05:46,751 WARN [org.jboss.modules] (Weld Thread Pool -- 1) Failed to define class com.randomcompany.oracle.spatial.adminws.exception.FaultLoggerListener in Module "deployment.data-stream-ear.ear.data-s
  2. stream-ws.war" from Service Module Loader: java.lang.NoClassDefFoundError: Failed to link com/randomcompany/oracle/spatial/adminws/exception/FaultLoggerListener (Module "deployment.data-stream-ear.ear.data-stream-ws.war" from Service Module Loader): org/apache/cxf/logging/FaultListener
  3. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  4. at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  5. at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  6. at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  7. at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:446)
  8. at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:274)
  9. at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:77)
  10. at org.jboss.modules.Module.loadModuleClass(Module.java:713)
  11. at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
  12. at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:412)
  13. at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:400)
  14. at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
  15. at org.jboss.as.weld.WeldModuleResourceLoader.classForName(WeldModuleResourceLoader.java:68)
  16. at org.jboss.weld.bootstrap.AnnotatedTypeLoader.loadClass(AnnotatedTypeLoader.java:65)
  17. at org.jboss.weld.bootstrap.AnnotatedTypeLoader.loadAnnotatedType(AnnotatedTypeLoader.java:60)
  18. at org.jboss.weld.bootstrap.FastAnnotatedTypeLoader.loadAnnotatedType(FastAnnotatedTypeLoader.java:104)
  19. at org.jboss.weld.bootstrap.BeanDeployer.addClass(BeanDeployer.java:94)
  20. at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$1.doWork(ConcurrentBeanDeployer.java:61)
  21. at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$1.doWork(ConcurrentBeanDeployer.java:58)
  22. at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:62)
  23. at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:55)
  24. at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  25. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  26. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  27. at java.lang.Thread.run(Thread.java:745)
  28. at org.jboss.threads.JBossThread.run(JBossThread.java:320)

这是我的 jboss-deployment-structure.xml :

  1. <jboss-deployment-structure>
  2. <ear-subdeployments-isolated>true</ear-subdeployments-isolated>
  3. <deployment>
  4. <dependencies>
  5. <module name="org.apache.ws.security" />
  6. <module name="javax.transaction.api" />
  7. <module name="org.apache.cxf" services="import">
  8. </module>
  9. </dependencies>
  10. </deployment>
  11. <sub-deployment name="data-stream-ejb.jar">
  12. </sub-deployment>
  13. <sub-deployment name="data-stream-ws.war">
  14. <dependencies>
  15. <module name="deployment.data-stream-ear.ear.data-stream-ejb.jar" />
  16. </dependencies>
  17. </sub-deployment>
  18. <sub-deployment name="data-stream-gui.war">
  19. </sub-deployment>
  20. </jboss-deployment-structure>

类包含在 data-stream-ws.war :

  1. package com.randomcompany.oracle.spatial.adminws.exception;
  2. import javax.naming.InitialContext;
  3. import javax.naming.NamingException;
  4. import org.apache.cxf.logging.FaultListener;
  5. import org.apache.cxf.message.Message;
  6. public class FaultLoggerListener implements FaultListener {
  7. private FaultLoggerInterface faultLogger;
  8. private String faultLoggerName;
  9. @Override
  10. public boolean faultOccurred(Exception exception, String description, Message message) {
  11. return getFautLogger().logException(exception, description);
  12. }
  13. private FaultLoggerInterface getFautLogger() {
  14. if (this.faultLogger == null) {
  15. try {
  16. InitialContext context = new InitialContext();
  17. this.faultLogger = ((FaultLoggerInterface) context.lookup(this.faultLoggerName));
  18. } catch (NamingException e) {
  19. throw new RuntimeException(e);
  20. }
  21. }
  22. return this.faultLogger;
  23. }
  24. public void setFaultLoggerName(String faultLoggerName) throws NamingException {
  25. this.faultLoggerName = faultLoggerName;
  26. }
  27. }

我试着把 ear-subdeployments-isolated 假象,但没有成功。

ylamdve6

ylamdve61#

我已经找到了一个解决方案彻底检查我的旧6.4 standalone.xml ; 我已将cxf添加到 urn:jboss:domain:ee:4.0 子系统作为一个全局模块(并将整个子系统的默认配置替换为从旧的子系统1.2->4.0的不同版本中获得的配置):

  1. <global-modules>
  2. <module name="org.apache.cxf" slot="main"/>
  3. </global-modules>
  4. <spec-descriptor-property-replacement>true</spec-descriptor-property-replacement>
  5. <jboss-descriptor-property-replacement>true</jboss-descriptor-property-replacement>
  6. <annotation-property-replacement>true</annotation-property-replacement>

应用层没有其他变化,现在部署完成,没有问题。

相关问题