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

JEE: Can not set <bean> field <service>.<bean> to <bean>$Proxy$

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

异常状态:

Can not set <package>.beans.ApplicationBean field <package>.service.rest.ApplicationService.applicationBean to <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 方面使用注解的原因是:


<包>.daos.ApplicationDao

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

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

我不确定这是否与它有任何关系,但 ApplicationService class 位于与 bean 和 dao 不同的模块中。最后,它们一起形成一个 ear 文件,其中共享模块(bean 和 daos)是 ejbModule,服务是 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 ...
}

如果这解决了问题,那么问题很可能是包含 class 的 jar 文件没有 beans.xml 文件,因此它没有被 CDI 拾取。