2011-11-02 70 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服務器,並且一切正常。

相關問題