我在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中描述的设置不起作用,3。正常工作?在这两种情况下,BaseAppBean都是在同一个Web应用程序上下文中创建的,唯一的区别是,在案例3中,类位于同一个jar中,而在案例1中,它是从其他应用程序的jar中获取的。