2012-08-31 93 views
0

我有兩個模塊WAR和Business。無法找到EJB無狀態Bean。注入失敗

我嘗試在Web模塊中注入一個無狀態bean。但無狀態bean無法找到?

錯誤在哪裏?任何想法??

在業務模塊:

@Stateless 
public class BusinessFacade { 

    public void processEntity(final MyEntitiy entity) { 
     System.out.println(entity.getName()); 
    } 

} 

在WAR模塊:

@ManagedBean 
@SessionScoped 
public class HelloBean implements Serializable { 

    @EJB 
    BusinessFacade businessFacade; 

    private static final long serialVersionUID = 1L; 

    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(final String name) { 
     this.name = name; 
    } 
} 

的錯誤:

[31.08.12 10:19:38:835 CEST] 00000018 webapp  E com.ibm.ws.webcontainer.webapp.WebApp notifyServletContextCreated SRVE0283E: Exception caught while initializing context: {0} 
           java.lang.NoClassDefFoundError: com.myproject.business.beans.BusinessFacade 
    at java.lang.Class.getDeclaredFieldsImpl(Native Method) 
    at java.lang.Class.getDeclaredFields(Class.java:544) 
    at org.apache.myfaces.config.annotation.AnnotationConfigurator.fields(AnnotationConfigurator.java:846) 
    at org.apache.myfaces.config.annotation.AnnotationConfigurator.createFacesConfig(AnnotationConfigurator.java:328) 
    at org.apache.myfaces.config.annotation.AnnotationConfigurator.createFacesConfig(AnnotationConfigurator.java:94) 
    at org.apache.myfaces.config.DefaultFacesConfigurationProvider.getAnnotationsFacesConfig(DefaultFacesConfigurationProvider.java:148) 
    at org.apache.myfaces.config.DefaultFacesConfigurationMerger.getFacesConfigData(DefaultFacesConfigurationMerger.java:91) 

.... 
.. 

Caused by: java.lang.ClassNotFoundException: com.myproject.business.beans.BusinessFacade 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:434) 
    at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:198) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:646) 
    at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:113) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:612) 
    at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62) 
    at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58) 
    at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:564) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:612) 
    at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:564) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:612) 
    ... 33 more 
+0

我認爲你需要在業務模塊和戰爭之間添加項目依賴關係。 –

+0

它們是否打包在同一個EAR中? – zeller

+0

@SaiYeYanNaingAye我在Pom.xml中定義了依賴關係。 – Kayser

回答

0

試試這個,看看會發生什麼:

@Stateless 
@LocalBean 
public class BusinessFacade { 

    public void processEntity(final MyEntitiy entity) { 
     System.out.println(entity.getName()); 
    } 

} 
+0

同樣的效果:-( – Kayser

+0

你正在使用哪一個應用服務器? – Heidarzadeh

+0

順便說一句,你是否清理了所有的東西並重新部署?我遇到了同樣的問題並用'@LocalBean'解決了它!我將再次檢查你的代碼。 – Heidarzadeh

0

我不認爲你可以簡單地做到這一點。這種類型的注入在同一個EAR中的EJB之間起作用,但是如果我在JBoss 5.0GA中沒有記錯的話,就不能將EJB注入到Servlet等等中(你應該檢查我是否正確)。

您應該告訴您是否使用EAR來保存Web模塊和EJB部分,或者以其他方式部署它們。

看一看here它可以幫助你以某種方式。

0

在EJB

public class BusinessFacade implements BusinessLocal { 
... 
} 

創建界面

@Local 
public interface BusinessLocal { 
    void processEntity(final MyEntitiy entity); 
} 

實現接口並注入接口。

@EJB 
BusinessLocal businessFacade; 
相關問題