加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

依赖注入 – WELD-001408注入EntityManager时不满意的依赖关系

发布时间:2020-12-13 20:12:30 所属栏目:百科 来源:网络整理
导读:我有@Stateless bean,它实现了两个接口(远程和本地).我还添加了@LocalBean anotation来访问带有无接口视图的bean. @Stateless@LocalBeanpublic class WeatherDataBean implements WeatherDataBeanRemote,WeatherDataBeanLocal { @Inject private EntityManag
我有@Stateless bean,它实现了两个接口(远程和本地).我还添加了@LocalBean anotation来访问带有无接口视图的bean.
@Stateless
@LocalBean
public class WeatherDataBean implements WeatherDataBeanRemote,WeatherDataBeanLocal {
    @Inject
    private EntityManager entityManager;

    public WeatherDataBean () {

    }
    // ....attributes,getter & setter methods ....
}

我使用@Inject因为这个原因采取from this example of JBoss AS7 quickstart:

We use the “resource producer” pattern,from CDI,to “alias” the old fashioned @PersistenceContext injection of the entity manager to a CDI style injection. This allows us to use a consistent injection style (@Inject) throughout the application.

以前我用过:

@PersistenceContext(unitName="WeatherStationJPA")
private EntityManager entityManager;

在EJB中,它没有任何问题.但是使用@Inject注释我得到这个错误:

WELD-001408 Unsatisfied dependencies for type [EntityManager] with
qualifiers [@Default] at injection point [[field] @Inject private
ejb.WeatherDataBean.entityManager]

这是我如何定义类资源:

public class Resources {
     @SuppressWarnings("unused")
     @PersistenceContext(unitName="WeatherStationJPA")
     @Produces
     private EntityManager entityManager;

     @Produces
     FacesContext getFacesContext() {
         return FacesContext.getCurrentInstance();
     }
}

如果我尝试注入实体管理器,为什么会出现此错误?

编辑:
根据@LightGuard的请求,我正在添加用于引用注释的包:

> WeatherDataBean有:

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.inject.Inject;

>资源有:

import javax.enterprise.inject.Produces;
import javax.faces.context.FacesContext;
import javax.inject.Singleton;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
我只是遇到了同样的问题,我通过将这个类添加到我的项目中来解决这个问题
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>
 * &#064;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();
   }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读