java - 我可以将属性注入(inject) JPA 实体监听器吗

标签 java jpa jboss ejb

我可以制作原型(prototype),看看会发生什么,但我太懒了。我希望能够将 EJB3 注入(inject)我的 JPA 实体监听器,以便它可以在 PrePersist 操作期间访问 EJB 的功能。那可能吗?如果不是...那么在JBoss下,Listener是创建一次,还是每次方法调用一次?我想我正在尝试了解每次调用在执行 JNDI 查找等方面的轻量级

任何人都知道有关这些主题的良好信息来源,因为我的简短谷歌搜索没有找到任何结果。

最佳答案

您必须求助于 JNDI 查找才能从您的 EntityListener 访问其他 EJB。我从未见过直接注入(inject)它们的方法——我认为这是因为 EntityListener 的语义。

以下是我使用 JBoss 4.0.x 和 4.2.x 的经验。

举个例子,考虑@PostPersist——在执行插入语句后调用。有两个问题需要考虑:

  • 如果您打开另一个 session 来查询它(即使使用 JNDI 查找),数据库也不会反射(reflect)当前实体。 不能保证事务会因为 session 被刷新而被提交。您也不会有自动生成的主键。

  • 实体监听器除了更新托管字段或在提交前验证数据完整性(与数据库触发器不同)之外似乎没有其他用途,这严重限制了它们的实用性。具体来说,在 JBoss 中,您甚至无法查找当前的安全上下文来记录谁在进行更改。太糟糕了。

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

关于java - 我可以将属性注入(inject) JPA 实体监听器吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/552968/

相关文章:

java - `java` 在此 Python 进程中找不到命令。请确保已安装 Java 并将 PATH 设置为 `java`

java - 在java中如何检查用户是否按下了某个键?

java - Java中的isHappy函数

java - 我可以在提交后回滚 JTA 事务吗?

java - HibernatePersistenceProvider.createEntityManagerFactory() 方法的 JBoss AS7 LinkageError

java - 在 Eclipse 3.4 上为 JBoss 热部署 : Ganymede

Java 忽略 return 语句

java - 首次连接到数据库时日志中出现 NullPointer

java - JPA更新父子

java - 带有负载均衡器的 JBoss 服务器