Jer*_*rin 7 dependency-injection stateless-session-bean entitymanager cdi java-ee-6
我有@Statelessbean实现两个接口(远程和本地).我还添加@LocalBean了用于通过无接口视图访问bean的anotation.
@Stateless
@LocalBean
public class WeatherDataBean implements WeatherDataBeanRemote, WeatherDataBeanLocal {
@Inject
private EntityManager entityManager;
public WeatherDataBean () {
}
// ....attributes, getter & setter methods ....
}
Run Code Online (Sandbox Code Playgroud)
我使用@Inject这个原因取自JBoss AS7快速启动的这个例子:
我们使用来自CDI的"资源生成器"模式,将实体管理器的旧式@PersistenceContext注入"别名"为CDI样式注入.这允许我们在整个应用程序中使用一致的注入样式(@Inject).
以前我用过:
@PersistenceContext(unitName="WeatherStationJPA")
private EntityManager entityManager;
Run Code Online (Sandbox Code Playgroud)
在EJB中,它没有任何问题.但是使用@Inject注释我得到这个错误:
WELD-001408在注入点[[field] @Inject private ejb.WeatherDataBean.entityManager]中带有限定符[@Default]的[EntityManager]类型的不满意依赖项
这是我如何定义类资源:
public class Resources {
@SuppressWarnings("unused")
@PersistenceContext(unitName="WeatherStationJPA")
@Produces
private EntityManager entityManager;
@Produces
FacesContext getFacesContext() {
return FacesContext.getCurrentInstance();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试注入实体管理器,为什么会出现此错误?
编辑: 根据@LightGuard的请求,我正在添加我用来引用注释的包:
WeatherDataBean有:
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.inject.Inject;
Run Code Online (Sandbox Code Playgroud)资源有:
import javax.enterprise.inject.Produces;
import javax.faces.context.FacesContext;
import javax.inject.Singleton;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
Run Code Online (Sandbox Code Playgroud)我遇到了类似的错误,原来我没有把一个beans.xml文件放在WEB-INF文件夹中.beans.xml文件可以是位于WEB-INF文件夹中的空文件.JBossAS检查该文件以启动CDI服务.
我只是遇到了同样的问题,我通过将这个类添加到我的项目中来解决这个问题
import java.util.logging.Logger;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
/**
* This class uses CDI to alias Java EE resources, such as the persistence context, to CDI beans
*
* <p>
* Example injection on a managed bean field:
* </p>
*
* <pre>
* @Inject
* private EntityManager em;
* </pre>
*/
public class Resources {
// use @SuppressWarnings to tell IDE to ignore warnings about field not being referenced directly
@SuppressWarnings("unused")
@Produces
@PersistenceContext
private EntityManager em;
// @Produces
// public Logger produceLog(InjectionPoint injectionPoint) {
// return Logger.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
// }
@Produces
@RequestScoped
public FacesContext produceFacesContext() {
return FacesContext.getCurrentInstance();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17119 次 |
| 最近记录: |