java – 我可以将属性注入JPA实体监听器

我可以对此进行原型设计,看看会发生什么,但我很懒.我希望能够将EJB3注入到我的JPA实体侦听器中,以便它可以在PrePersist操作期间访问EJB的功能.那可能吗?如果不是……那么在JBoss下,是否会创建一次Listener,或者每次方法调用一次?我想我正在尝试理解每次调用在执行JNDI查找等方面的轻量级

任何人都知道这些主题的良好信息来源,因为我的简短的谷歌搜索并没有改变任何东西.

最佳答案 您将不得不求助于JNDI查找以从EntityListener访问其他EJB.我从未见过直接注入它们的方法 – 我认为这是因为EntityListener的语义.

以下是我对JBoss 4.0.x和4.2.x的经验.

例如,考虑@PostPersist – 在执行insert语句后调用.有两个问题需要考虑:

>如果打开另一个会话来查询它,数据库将不会反映当前实体(即使使用JNDI查找).无法保证仅仅因为会话被刷新而提交事务.您也不会拥有自动生成的主键.
>除了更新托管字段或在提交之前验证数据完整性(与数据库触发器不同)之外,实体侦听器似乎并不打算用于任何事情,这严重限制了它们的实用性.具体来说,在JBoss中,您甚至无法查找当前的安全上下文来记录进行更改的人员.太糟糕了.

关于存在多少实体监听器,我在JBoss 4.2.x中的经验是只存在一个实例,并且在容器线程的上下文中调用这些方法.但是,在群集设置中可能不是这样.无论哪种方式,我建议你不要在任何实体监听器中缓存你的引用 – 不清楚JBoss究竟对它们做了什么(钝化它们?我希望不是,但你永远不知道!).

点赞