我可以对此进行原型设计,看看会发生什么,但我很懒。我希望能够将EJB3注入到我的JPA实体侦听器中,以便它可以在PrePersist操作期间访问EJB的功能。那可能吗?如果不是......那么在JBoss下,是否会创建一次Listener,或者每次方法调用一次?我想我正在尝试理解每次调用在执行JNDI查找等方面的轻量级
任何人都知道有关这些主题的良好信息来源,因为我的简短的谷歌搜索没有提出任何建议。
答案 0 :(得分:2)
您必须使用JNDI查找来访问EntityListener中的其他EJB。我从未见过直接注入它们的方法 - 我认为这是因为EntityListener的语义。
以下是我对JBoss 4.0.x和4.2.x的经验。
例如,考虑@PostPersist - 在执行insert语句后调用。有两个问题需要考虑:
如果您打开另一个会话来查询它,数据库将不会反映当前实体(即使使用JNDI查找)。 无保证仅仅因为会话被刷新而提交事务。您也不会拥有自动生成的主键。
除了更新托管字段或在提交之前验证数据完整性(与数据库触发器不同)之外,实体侦听器似乎没有任何用途,这严重限制了它们的实用性。具体来说,在JBoss中,您甚至无法查找当前的安全上下文来记录进行更改的人员。那很糟糕。
关于存在多少个实体监听器,我在JBoss 4.2.x中的经验是只有一个实例存在,并且这些方法是在容器线程的上下文中调用的。 但是,在群集设置中可能不是这样。无论哪种方式,我建议你 NOT 在任何实体监听器中缓存你的引用 - 不清楚JBoss究竟是什么对他们做(钝化他们?我希望不是,但你永远不知道!)。
答案 1 :(得分:0)
你在使用Spring吗?如果是这样,您可以使用@Configurable并让该方面为您注入依赖项。