Java 找不到EJB无状态Bean。注射失败

Java 找不到EJB无状态Bean。注射失败,java,jakarta-ee,jsf-2,ejb,code-injection,Java,Jakarta Ee,Jsf 2,Ejb,Code Injection,我有两个模块:战争和商业 我尝试在web模块中注入一个无状态bean。但是找不到无状态bean 错误在哪里?有什么想法吗 在业务模块中: @Stateless public class BusinessFacade { public void processEntity(final MyEntitiy entity) { System.out.println(entity.getName()); } } 战时模块: @ManagedBean @Session

我有两个模块:战争和商业

我尝试在web模块中注入一个无状态bean。但是找不到无状态bean

错误在哪里?有什么想法吗

在业务模块中:

@Stateless
public class BusinessFacade {

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

}
战时模块:

@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

试试这个,看看会发生什么:

@Stateless
@LocalBean
public class BusinessFacade {

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

}

我认为你做不到这么简单。这种类型的注入可以在同一个EAR中的EJB之间工作,但是如果我在JBoss 5.0GA中没有记错的话,您就不能将EJB注入Servlet,等等(您应该检查我是否正确)

您应该知道是使用EAR来保存Web模块和EJB部分,还是以其他方式进行部署

看一看,它可能会对你有所帮助

创建一个接口

@Local
public interface BusinessLocal {
    void processEntity(final MyEntitiy entity);
}
在ejb中实现接口

public class BusinessFacade implements BusinessLocal {
...
}
并注入接口

@EJB
BusinessLocal businessFacade;

我认为您需要在业务模块和war之间添加项目依赖关系。它们是否打包在同一个EAR中?@SaiYeYanNaingAye我在Pom.xml中定义了依赖关系。@zeller是的,它们打包在同一个EAR中。@Kayser在同一个Pom中定义可能不够好;如果您使用mvn实际打包您的web app/EAR文件,则可能是“OK”。最后,您的部署描述符(打包后)是什么样子的?您使用的是哪个应用程序服务器?顺便问一下,您是否清理了所有内容并正确地重新部署了?我遇到了同样的问题,并用
@LocalBean
解决了它!我会再次检查你的代码。