Java JEE:无法设置<;豆>;字段<;服务>&书信电报;豆>;至<;豆>$代理$

Java JEE:无法设置<;豆>;字段<;服务>&书信电报;豆>;至<;豆>$代理$,java,jakarta-ee,ejb,wildfly,cdi,Java,Jakarta Ee,Ejb,Wildfly,Cdi,我对JEE宇宙比较陌生,所以请容忍我。 我无法理解本地wildfly(10.1.0版)服务器引发的异常 例外情况说明: 无法将.beans.ApplicationBean字段.service.rest.ApplicationService.ApplicationBean设置为.beans.ApplicationBean$Proxy$\u$\ uWeld$EnterpriseProxy$ 应用服务器上的实际部署成功,但调用REST调用会生成所述异常。 奇怪的部分是:如果我第二次部署同一个包,调用的

我对JEE宇宙比较陌生,所以请容忍我。
我无法理解本地wildfly(10.1.0版)服务器引发的异常

例外情况说明:

无法将.beans.ApplicationBean字段.service.rest.ApplicationService.ApplicationBean设置为.beans.ApplicationBean$Proxy$\u$\ uWeld$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和DAO)是EJB模块,服务是web应用程序


我将非常感谢一些真知灼见-干杯

这可能是几件事,但这里是我最好的猜测:

尝试将@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无法获取该类。

您完全正确。服务模块缺少beans.xml文件。出于某种原因,我认为如果只有一个模块有它就足够了,因为它们都打包在一个ear文件中。谢谢你证明我错了。