我对JEE世界比较陌生,所以请耐心等待 我无法理解我的本地wildfly(版本10.1.0)服务器抛出的异常。
例外情况:
无法将< package> .beans.ApplicationBean字段< package> .service.rest.ApplicationService.applicationBean设置为< package> .beans.ApplicationBean $ Proxy $ _ $$ _ Weld $ EnterpriseProxy $
应用程序服务器上的实际部署成功,但调用REST调用会生成所述异常 奇怪的部分是:如果我第二次部署同一个包,则调用的REST调用不会生成异常,并且应用程序按预期工作。
有问题的课程是:
<包> .beans.ApplicationBean
@Stateless
@LocalBean
public class ApplicationBean {
@Inject
private ApplicationDao applicationDao;
... some methods ...
}
的<包> .service.rest.ApplicationService
@Path("/applications")
@Stateless
@LocalBean
public class ApplicationService {
@Inject
private ApplicationBean applicationBean;
... methods which use the applicationBean field ...
}
我对CDI / EJB使用注释的理由是:
@Stateless
因为我需要DAO类中的事务(DAO类在下面列出了完整性的原因)@LocalBean
因为我试图注入特定的实现类而没有接口
的<包> .daos.ApplicationDao
@Stateless
@LocalBean
public class ApplicationDao {
@PersistenceContext
private EntityManager em;
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
... method ...
}
我不确定它是否与它有任何关系,但ApplicationService类位于与bean和dao不同的模块中。最后,它们一起形成一个ear文件,其中共享模块(bean和daos)是ejbModule,服务是web应用程序。
我非常感谢一些见解 - 干杯!
答案 0 :(得分:0)
这可能是一些事情,但这是我最好的猜测:
尝试将@Inject更改为@EJB
@Stateless
@LocalBean
public class ApplicationBean {
@EJB
private ApplicationDao applicationDao;
... some methods ...
}
<包> .service.rest.ApplicationService
@Path("/applications")
@Stateless
@LocalBean
public class ApplicationService {
@EJB
private ApplicationBean applicationBean;
... methods which use the applicationBean field ...
}
如果修复它,那么问题可能是包含该类的jar文件没有beans.xml文件,因此它不会被CDI接收。