java-ee – CDI:WELD-001408不满意的依赖关系,如何解决?
发布时间:2020-12-14 16:44:30 所属栏目:Java 来源:网络整理
导读:我做CDI的小测试项目.我的应用程序由EJB EAR和WAR组成,全部部署在Glassfish 4上.我使用Hibernate 4.3.4访问数据库. 我的目标是验证EJB(DAO)中的类可以接收到EntityManager的注入. SessionBean EJB的模式不是很棒,但是我必须修改已经创建的应用程序,所以我没
我做CDI的小测试项目.我的应用程序由EJB EAR和WAR组成,全部部署在Glassfish 4上.我使用Hibernate 4.3.4访问数据库.
我的目标是验证EJB(DAO)中的类可以接收到EntityManager的注入. SessionBean EJB的模式不是很棒,但是我必须修改已经创建的应用程序,所以我没有太多的选择. 这是我的EJB代码: @Named public class DAOTest implements Serializable { private static final long serialVersionUID = 1L; @PersistenceContext(unitName="CDI-ejb") private EntityManager em; public void test(){ //em.getClass(); } public EntityManager getEm() { return em; } public void setEm(EntityManager em) { this.em = em; } public DAOTest() { // TODO Auto-generated constructor stub } } Service.java @Stateless @LocalBean public class Service implements ServiceLocal { @Inject DAOTest test; /** * Default constructor. */ public Service() { // TODO Auto-generated constructor stub } @Override public void test() { test.test(); } } 和ServiceLocal.java @Local public interface ServiceLocal { void test(); } 在我的战争中 @WebServlet("/Test") public class Test extends HttpServlet { private static final long serialVersionUID = 1L; @Inject private ServiceLocal service; /** * @see HttpServlet#HttpServlet() */ public Test() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request,HttpServletResponse response) */ protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { service.test(); } /** * @see HttpServlet#doPost(HttpServletRequest request,HttpServletResponse response) */ protected void doPost(HttpServletRequest request,IOException { // TODO Auto-generated method stub } } 我通过使用@ Stateless注释来对DAOTest进行了注释.一切都应该发生.所以CDI运作良好但是只要@命名它不想工作. 任何想法? 堆栈跟踪: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [DAOTest] with qualifiers [@Default] at injection point [[BackedAnnotatedField] @Inject test.Service.test] 我的beans.xml <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> </beans> 解决方法
默认情况下,Java EE 7具有隐式bean归档,即bean类需要将范围注释作为CDI bean进行发现.
@Named不是范围注释.尝试使用@Dependent来代替. 在CDI 1.1 / Java EE 7中不再需要beans.xml.如果你有一个,那么确切的版本和bean-discovery-mode有所不同.请参阅CDI 1.1规范的Bean archives部分. 因为你没有发布你的beans.xml,很难说这个文件是否是问题的一部分. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |