【问题标题】:JEE: Can not set <bean> field <service>.<bean> to <bean>$Proxy$JEE:无法将 <bean> 字段 <service>.<bean> 设置为 <bean>$Proxy$
【发布时间】:2017-07-09 01:22:56
【问题描述】:

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

异常状态:

无法将 .beans.ApplicationBean 字段 .service.rest.ApplicationService.applicationBean 设置为 .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 应用程序。

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

【问题讨论】:

    标签: java jakarta-ee ejb wildfly cdi


    【解决方案1】:

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

    尝试将您的@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 文件。出于某种原因,我认为如果只有一个模块拥有它就足够了,因为它们都打包在一个耳文件中。谢谢你证明我错了。
    猜你喜欢
    • 1970-01-01
    • 2018-06-23
    • 2011-03-28
    • 2020-11-24
    • 2012-04-10
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多