2011-11-02 39 views
0

我有以下安排POJO:的NoClassDefFoundError当EJB - 类是在classpath

Tomcat --EJB-invokation--> JBoss 
(6.0.14)      (5.1.0) 

两个服务器在同一台机器上运行。

当我运行Tomcat的web应用程序,我得到以下错误在Tomcat日志:

2011-11-02 15:59:02,077 [http-9320-4] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/frontend].[action]- "Servlet.service()" pour la servlet action a généré une exception 
javax.ejb.EJBException: Unexpected Error 
java.lang.NoClassDefFoundError: com/mycompany/app/transfer/internal/dto/account/AccountWithDemandDTO 
     at com.mycompany.app.back.services.ServiceImpl.findAccount(ServiceImpl.java:925) 
     at com.mycompany.app.back.services.ServiceImpl.findAccount(ServiceImpl.java:879) 
     at sun.reflect.GeneratedMethodAccessor2703.invoke(Unknown Source) 
     ... 

一个没有被发现的类构成了对JBoss的耳朵的一部分:

applicationear.ear 
    - META-INF 
     - application.xml 
     - ... 
    - transfer-internal-dto-6.0.9.jar 
    - ... 

application.xml是由:

<?xml version="1.0" encoding="UTF-8" ?> 
<application ...> 
    <display-name>myapp</display-name> 
    <module><ejb>backend-services-6.0.9.jar</ejb></module> 
    <module><java>transfer-internal-dto-6.0.9.jar</java></module> 
    ... 
</application> 

望着JMX控制台,我可以看到,THI s jar文件以及组成耳朵的其他jar:

id="vfszip:/misc/JavaEE/package/myapp/back/6.0.9/deploy/applicationear.ear/transfer-internal-dto-6.0.9.jar/",type=SubDeployment 

所以对于我来说这个类是存在于JBoss上的。在Tomcat的端,客户端应用程序部署为战争:

frontend.war 
    - WEB-INF 
     - lib 
      - transfer-internal-dto-6.0.9.jar 
      - ... 
    - META-INF 
     - MANIFEST.MF 

Class-Path申报清单包括lib/transfer-internal-dto-6.0.9.jar

我对这个问题可能会有点困惑 - 有没有人有任何想法?

的信息的一些有用位:

  • 的Java 1.6.0_18
  • 一切使用Maven
  • 应用程序部署使用JBoss的摆弄包装 - 热部署被禁用
  • 这件事发生后,机器的平稳重启 - 同一个应用程序在重启前工作 - 应用程序在重启之间未被修改
  • DTO对象是一个POJO实现Serializable - 类的两个字段是其他POJO(都在同一个jar中实现Serializable)。其中一个辅助POJO引用了两个枚举,它们位于不同的.jar中。该辅助.jar在application.xml和MANIFEST.MF文件中正确定义。这棵树中没有一个POJO具有静态初始化器或类似的实例化时间代码。
  • 这种安排工作正常,我们的测试环境
  • 没有什么在JBoss日志
  • 客户端是一个Struts应用程序

回答

0

在我把在JMX控制台的差异到底我们测试和生产环境,并注意到一些差异。这是特别奇怪的,因为环境已被掌握(即它们是从脚本创建的),并且应用程序也是从脚本部署的,并且在计划关闭之前一切工作。因此,似乎可能的唯一情况是部署期间的某种问题。

因此,我们重新启动了JBoss服务器,并且一切正常。

相关问题