gpt4 book ai didi

jakarta-ee - CDI : WELD-001408 Unsatisfied dependencies, 怎么解决呢?

转载 作者:行者123 更新时间:2023-12-03 12:14:42 29 4
gpt4 key购买 nike

我用 CDI 做了一个小测试项目。我的应用程序由 EJB EAR 和 WAR 组成,全部部署在 Glassfish 4 上。我使用 Hibernate 4.3.4 访问数据库。

我的目标是验证 EJB (DAO) 中的类是否可以接收 EntityManager 的注入(inject)。

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
}

}

服务.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();
}

在我的 war 中:
@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, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}


}

我通过使用@Stateless 注释对 DAOTest 进行了测试。一切都按原样发生。所以CDI运作良好。但是只有@Named 它不想工作。

任何的想法?

堆栈跟踪:
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反而。
beans.xml在 CDI 1.1/Java EE 7 中不再需要。如果你有,那么确切的版本和 bean-discovery-mode做出改变。见Bean archives CDI 1.1 规范的部分。

因为你没有发布你的beans.xml ,很难判断这个文件是否是问题的一部分。

关于jakarta-ee - CDI : WELD-001408 Unsatisfied dependencies, 怎么解决呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22191377/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com