【问题标题】:Can I inject properties into a JPA Entity Listener我可以将属性注入 JPA 实体侦听器吗
【发布时间】:2010-10-07 20:49:05
【问题描述】:

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

任何人都知道关于这些主题的良好信息来源,因为我短暂的谷歌搜索没有发现任何东西。

【问题讨论】:

    标签: java jpa jboss ejb


    【解决方案1】:

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

    以下内容来自我使用 JBoss 4.0.x 和 4.2.x 的经验。

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

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

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

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

    【讨论】:

      【解决方案2】:

      你在使用 Spring 吗?如果是这样,您可以使用 @Configurable 并让该方面为您注入您的依赖项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-01
        • 1970-01-01
        • 2014-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多