我知道 JSR-000220 Enterprise JavaBeans 3.0 Final Release(持久性)规范指出:
“一般来说,便携式应用程序不应调用 EntityManager 或查询操作, 访问其他实体实例,或修改生命周期回调方法中的关系。”
这看起来非常具有限制性。我们有一种情况,我们希望从 EntityListener 中访问 EntityManager。
在 Jboss/Glassfish 或任何其他应用程序服务器上的监听器中使用 EntityManager 时,是否有人遇到过任何不利影响/陷阱?
事实上,你是对的。 JPA 规范如此规定,在这种情况下,它建议使用 EJB 侦听器(或非 Java EE 环境中的 Spring AOP)。
我不知道你的听众的目的。但只将日志记录、身份验证和路由等横切关注点放入其中。例如,Hibernate 参考文档使用侦听器来审核所有对象修改的日志。一旦 EJB 侦听器可以使用实体管理器,它就可以由 EJB 侦听器(或非 Java EE 环境中的 Spring AOP)来完成。 Java EE 规范允许这样做。因此,EJB 侦听器共享其目标 EJB 使用的相同 ENC,这样,也共享相同的持久性上下文(实体管理器)。
如果您愿意,请查看我的个人资料。我有很多 ORM 相关的问题。
问候,