Phi*_*kus 9 java cdi java-ee-6 ejb-3.1 glassfish-3
我是Java EE 6和CDI的新手.我已经阅读了几个教程和焊接文档.然而,根据我的理解应该起作用的东西不是,所以我需要帮助.
我有以下情况.我使用随IDE提供的maven原型创建了一个带有NetBeans 7.0.1的Java EE 6应用程序,并部署到IDE提供的GlassFish 3.1.
beans.xml位于我的EJB jar的META-INF目录中.
我创建了一个类作为我的EJB工件(和EntityManager)的生产者类工作的类
@Stateless
public class EjbArtifactProducer {
@PersistenceContext(unitName = "trackProfiler-PU")
private EntityManager em;
@EJB
private UserFacadeLocal userFacade;
@EJB
private AuthServiceLocal authService;
@EJB
private NewsEntryFacadeLocal newsEntryFacade;
@EJB
private RoleFacadeLocal roleFacade;
@EJB
private TrackCommentFacade trackCommentFacade;
@EJB
private TrackFacade trackFacade;
@EJB
private TrackTypeFacade trackTypeFacade;
@EJB
private WaypointFacadeLocal waypointFacade;
@Produces
public AuthServiceLocal getAuthService() {
return authService;
}
@Produces
public EntityManager getEm() {
return em;
}
@Produces
public NewsEntryFacadeLocal getNewsEntryFacade() {
return newsEntryFacade;
}
@Produces
public RoleFacadeLocal getRoleFacade() {
return roleFacade;
}
@Produces
public TrackCommentFacade getTrackCommentFacade() {
return trackCommentFacade;
}
@Produces
public TrackFacade getTrackFacade() {
return trackFacade;
}
@Produces
public TrackTypeFacade getTrackTypeFacade() {
return trackTypeFacade;
}
@Produces
public UserFacadeLocal getUserFacade() {
return userFacade;
}
@Produces
public WaypointFacadeLocal getWaypointFacade() {
return waypointFacade;
}
}
Run Code Online (Sandbox Code Playgroud)
我试图将@Produces注释直接应用于上面显示的方法字段.
但是,以下内容不会在另一个EJB中注入任何内容
@Inject
private NewsEntryFacadeLocal newsEntryFacade;
Run Code Online (Sandbox Code Playgroud)
这是在无状态会话ejb中完成的,但是当我尝试在任何业务方法中访问newsEntryFacade时,抛出NullPointerException.所以很明显没有注入正在发生或我的生产者产生空引用.
我错过了什么吗?或者这应该根据CDI/Weld工作?
奇怪的是,当我尝试将@Inject EJB添加到Web应用程序部分时,它似乎是这样工作的(但是我需要在我的.war中使用额外的生成器类来实现这一点,这是应该的吗?).
编辑:该项目使用ant构建(由NetBeans生成).NetBeans提供的Maven原型是否存在问题?似乎在Maven原型中,war和ejb模块之间存在CDI注入的一些问题.我发现,如果我在Web和ejb模块中有单独的生成器,Glassfish会生成一个部署错误,指出有两个无法区分的接口实现.但是当我删除Web模块中的生产者时,Weld抱怨我想要在Web模块中注入我的bean的EJB无法解析.此外,使用Ant构建EJB可以在没有生成器的情况下@Injected,而maven构建需要类上的生成器字段.我无法解释这是怎么发生的.毕竟最终部署应该或多或少相等,不应该吗?
| 归档时间: |
|
| 查看次数: |
8715 次 |
| 最近记录: |