将无状态EJB注入JSFmanaged bean会导致WAS 8.5中出现NullPointer

时间:2012-12-20 10:32:29

标签: jsf ejb websphere code-injection

使用JSF 2.x mojarra实现(2.0和2.1测试)的Java EE 6项目,其中会话bean通过@EJB注释注入到JSF托管bean中,在Websphere Application Server 8.5中失败,而它在Glassfish 3.x上运行(分别在GF 3.0和3.1上测试):

编码方法如下:

SomeEJBFacade.java

@Stateless
public class SomeEJBFacade() {

     public String testMethod() {
        return "testing 1 2 3";
     }

}

testBean这个

@ManagedBean
@ViewScoped
public class TestBean implements java.io.Serializable {
    @EJB SomeEJBFacade facade;

    public String getTestStr() {
        return facade.testMethod();
    }
}

JSF facelet片段:

<h:outputText value="#{testBean.testStr}" />

以上原因导致TestBean的 testStr()方法出现空指针异常

同样,任何JPA事务方法都会抛出空指针异常 类似的观点。

1 个答案:

答案 0 :(得分:0)

问题是GlassFishs和WebSpheres类加载器确实以不同的方式工作。您必须在Web项目META-INF / MANIFEST.MF中添加ejb模块作为依赖项:

Class-Path: EnappDaemonEJB.jar

其中'EnappDaemonEJB.jar'是生成的jar / EJB artefact的名称 - 换句话说,我的EJB项目的名称是'EnappDaemonEJB'。

链接:WebSphere Infocenter - see Procedure point 2