在WAS 8.5中,将无状态EJB注入JSF管理的Bean会导致空指针异常。

4

使用JSF 2.x mojarra实现的Java EE 6项目(已测试2.0和2.1),其中Session Bean通过@EJB注解注入到JSF托管的Bean中,在WebSphere应用程序服务器8.5上失败,而在Glassfish 3.x上正常运行(分别在GF 3.0和3.1上进行了测试):

编码方法如下:

SomeEJBFacade.java

@Stateless
public class SomeEJBFacade() {

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

}

测试Bean

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

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

JSF面部分片:

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

上述代码会导致TestBean类中的testStr()方法抛出空指针异常

类似地,任何JPA事务方法在类似的点上都会抛出空指针异常。


2
这看起来应该可以工作。您可能发现了产品缺陷,因此我建议与IBM开放一个PMR。 - Brett Kail
1个回答

0
问题在于GlassFish和WebSphere的类加载器工作方式不同。您必须将ejb模块添加为Web项目META-INF/MANIFEST.MF中的依赖项:
Class-Path: EnappDaemonEJB.jar

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

链接: WebSphere Infocenter - 参见步骤2


我曾被一位WebSphere专家告知,WAS不支持Mojarra实现中的依赖注入,并且在WAS中强制使用Apache MyFaces进行DI。 - fledglingCoder
好的,(at)EJB是JEE CDI标准,而(at)ManagedBean是JSF...但事实上,Mojarra覆盖了注入引擎:https://www.java.net//node/701374。我尝试过,在WAS 8.5.0.2上使用Mojarra 2.0.3,无论是(at)EJB还是(at)Inject都无法进行注入...所以我的答案是错误的!对此感到抱歉... - swarley
在使用Mojarra 2.x时,在WAS上,使用@Named注释的控制器bean也无法正常工作。 - fledglingCoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接