2012-03-28 68 views
2

我有一個包含兩個模塊CC-ejb和CC-war的應用程序(「CC」)。 CC-ejb包含CC-war使用的JPA實體和外牆。此應用程序正常工作。現在我用另外兩個模塊創建另一個(「CINT」):CINT-ejb和CINT-war。在Web模塊中,我需要訪問由CC-ejb提供的對象。我使用NetBeans 7.1進行開發,並使用Glassfish 3.1.1進行部署。無法部署引用其他EJB模塊的Java EE應用程序


在CC-EJB我有一個接口:

/* ... */ 
import javax.ejb.Local; 

@Local 
public interface CallDetailsFacadeLocal { 
     /* ... */ 

和實現類:

/* ... */ 
import javax.ejb.Stateless; 
import javax.persistence.EntityManager; 
/* ... */ 
import tp.coma.data.entities.CallDetails; 

@Stateless 
public class CallDetailsFacade 
      extends AbstractFacade<CallDetails> 
      implements CallDetailsFacadeLocal { 
    @PersistenceContext(unitName = "CC-ejbPU") 
    private EntityManager em; 
    /* ... */ 

在CINT戰我指的是在一個我的豆類:

/* ... */ 
import javax.ejb.EJB; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 
import tp.coma.data.beans.CallDetailsFacadeLocal; 
/* ... */ 

@ManagedBean(name = "bookingController") 
@SessionScoped 
public class BookingController implements Serializable { 
    /* ... */ 
    @EJB 
    private CallDetailsFacadeLocal cdrFacade; 
    /* ... */ 

當部署CINT(CC已經啓動並運行)我得到以下信息:

Error occurred during deployment: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.RuntimeException: java.lang.NoClassDefFoundError: Ltp/coma/data/beans/CallDetailsFacadeLocal;java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.RuntimeException: java.lang.NoClassDefFoundError: Ltp/coma/data/beans/CallDetailsFacadeLocal;. Please see server.log for more details.

在服務器日誌中我可以看到:

[#|2012-03-28T12:42:42.236+0200|SEVERE|glassfish3.1.1|global|_ThreadID=22;_ThreadName=Thread-2;|Class [ Ltp/coma/data/beans/CallDetailsFacadeLocal; ] not found. Error while loading [ class tp.coma.cint.jsf.BookingController ]|#] [#|2012-03-28T12:42:42.252+0200|SEVERE|glassfish3.1.1|global|_ThreadID=22;_ThreadName=Thread-2;|Class [ Ltp/coma/data/beans/CallDetailsFacadeLocal; ] not found. Error while loading [ class tp.coma.cint.jsf.BookingController ]|#]

和幾個(八個)異常堆棧跟蹤。

我在做什麼錯?

+0

看起來像你沒有在第二個應用程序中包含「CallDetailsFacadeLocal」類。 – Osw 2012-03-28 11:29:55

+0

將CC-ejb項目添加到「項目屬性」中的CINT-war庫中,並將其設置爲不包含在包中。 – ManieQ 2012-03-28 11:45:30

+0

@ManielQ,至少必須包含界面。 – Osw 2012-03-28 11:50:09

回答

1

如果您正在使用maven構建,請閱讀有關生成客戶端jar和ejb jar的信息。 http://maven.apache.org/plugins/maven-ejb-plugin/examples/ejb-client-dependency.html

如果你在做ant構建,創建一個生成客戶端jar的任務,只需包含**/* Local.jar或任何適合你的項目的模式。

不要忘記* $ 1.class文件,它們可能會在稍後咬你。例如,如果您在Enum上進行切換,則java會生成一個匿名類,最終得到XYZ $ 1.class,並且根據它是什麼,您需要排除或包含它。在我的例子中,maven包含了來自會話bean實現的生成的$ 1.class。然後,不同的類加載器發瘋,這個匿名類有兩個副本。 (IllegalAccessError)

相關問題