当bean来自其他jar时,@ EJB(lookup)没有注入到JSF Managed Bean中

时间:2015-01-07 13:31:21

标签: java java-ee ejb jboss7.x

我在JBoss 7.1上部署了三个应用程序:BaseApp,MyApp1,MyApp2。 MyApp1和MyApp依赖于BaseApp(他们使用BaseApp的baseEJB.jar)。我需要创建一个JSF托管bean,我想使用@EJB注释查找EJB:

public class BaseAppBean {

    @EJB(lookup = "java:global/BaseApp/baseEJB/ManagerBean!com.ejb.manager.Manager")
    private Manager manager;

    public User getUser() {
        return manager.getUser();
    }

    ...
}

BaseAppBean将在MyApp1和MyApp2中使用,因此我决定将此类放在BaseApp中是一个好主意,这样两个应用程序都可以从baseEJB.jar获取它。但后来我意识到它不起作用,似乎没有注入Manager EJB,并且在getUser()方法中抛出了NullPointerException。

经过一些试验后,我到达了三个设置:

  1. BaseAppBean放置在BaseApp中,使用@EJB(查找)注释进行EJB注入 - > EJB未注入,manager == null
  2. BaseAppBean放置在BaseApp中,JNDI查找而不是@EJB注释 - > EJB正常查找,manager!= null
  3. 将BaseAppBean复制到MyApp1和MyApp2(我希望避免的复制),使用@EJB(查找)进行EJB注入 - > EJB正确注入,manager!= null
  4. 因此我的问题是,为什么1中描述的设置不起作用,3。正常工作?在这两种情况下,BaseAppBean都是在同一个Web应用程序上下文中创建的,唯一的区别是,在案例3中,类位于同一个jar中,而在案例1中,它是从其他应用程序的jar中获取的。

0 个答案:

没有答案