JEE:无法将<bean>字段<service>。<bean>设置为<bean> $ Proxy $

时间:2017-02-19 21:31:12

标签: java java-ee ejb wildfly cdi

我对JEE世界比较陌生,所以请耐心等待 我无法理解我的本地wildfly(版本10.1.0)服务器抛出的异常。

例外情况:

  

无法将&lt; package&gt; .beans.ApplicationBean字段&lt; package&gt; .service.rest.ApplicationService.applicationBean设置为&lt; package&gt; .beans.ApplicationBean $ Proxy $ _ $$ _ Weld $ EnterpriseProxy $

应用程序服务器上的实际部署成功,但调用REST调用会生成所述异常 奇怪的部分是如果我第二次部署同一个包,则调用的REST调用不会生成异常,并且应用程序按预期工作。

有问题的课程是:

&LT;包&GT; .beans.ApplicationBean

@Stateless
@LocalBean
public class ApplicationBean {
    @Inject
    private ApplicationDao applicationDao;

    ... some methods ...
}


&LT;包&GT; .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因为我试图注入特定的实现类而没有接口


&LT;包&GT; .daos.ApplicationDao

@Stateless
@LocalBean
public class ApplicationDao {
    @PersistenceContext
    private EntityManager em;

    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
    ... method ...
}

我不确定它是否与它有任何关系,但ApplicationService类位于与bean和dao不同的模块中。最后,它们一起形成一个ear文件,其中共享模块(bean和daos)是ejbModule,服务是web应用程序。

我非常感谢一些见解 - 干杯!

1 个答案:

答案 0 :(得分:0)

这可能是一些事情,但这是我最好的猜测:

尝试将@Inject更改为@EJB

@Stateless
@LocalBean
public class ApplicationBean {
    @EJB
    private ApplicationDao applicationDao;

    ... some methods ...
}

&LT;包&GT; .service.rest.ApplicationService

@Path("/applications")
@Stateless
@LocalBean
public class ApplicationService {
    @EJB
    private ApplicationBean applicationBean;

    ... methods which use the applicationBean field ...
}

如果修复它,那么问题可能是包含该类的jar文件没有beans.xml文件,因此它不会被CDI接收。