【问题标题】:In Seam what's the difference between injected EntityManager and getEntityManager from EntityHome在 Seam 中注入的 EntityManager 和来自 EntityHome 的 getEntityManager 有什么区别
【发布时间】:2010-03-08 13:56:48
【问题描述】:

我正在使用 needle 测试 API 测试 Seam 应用程序。在我的代码中,我使用了 EntityHome 的 getEntityManager() 方法。当我对内存数据库运行单元测试时,出现以下异常:

java.lang.IllegalStateException: No application context active
at org.jboss.seam.Component.forName(Component.java:1945)
at org.jboss.seam.Component.getInstance(Component.java:2005)
at org.jboss.seam.Component.getInstance(Component.java:1983)
at org.jboss.seam.Component.getInstance(Component.java:1977)
at org.jboss.seam.Component.getInstance(Component.java:1972)
at org.jboss.seam.framework.Controller.getComponentInstance(Controller.java:272)
at org.jboss.seam.framework.PersistenceController.getPersistenceContext(PersistenceController.java:20)
at org.jboss.seam.framework.EntityHome.getEntityManager(EntityHome.java:177)
etc ..

我可以通过注入 EntityManager 来解决其中的一些错误

@In
EntityManager entityManager;

不幸的是EntityHome 的persist 方法也调用了getEntityManager。这意味着大量的模拟或以某种方式重写代码。有什么解决方法吗?为什么还是会抛出这个异常?顺便说一句,我正在使用 Seam 2.2.0 GA。

组件没有什么特别之处。它们是由 seam-gen 生成的。测试是使用内存数据库执行的 - 我按照http://jbosscc-needle.sourceforge.net/jbosscc-needle/1.0/db-util.html 中的示例进行操作。

【问题讨论】:

    标签: java jpa seam


    【解决方案1】:

    在 Seam 中,从 EntityHome 注入的 EntityManager 和 getEntityManager 有什么区别?

    没有人。

    当使用 EntityHome 中的 getEntityManager 时,Seam 将查找名为 entityManager 的 Seam 管理的持久性上下文。如果您设置 Seam 管理的持久性上下文使用不同于 entityManager 的名称,您的 EntityHome 将抛出 Excedption。

    这里是EntityHome中getEntityMananger的默认实现

    public EntityManager getEntityManager() {
        return (EntityMananger) Component.getInstance("entityManager");
    }
    

    当使用@In-jected EntityManager 时,Seam 会如上所示。两者都是相同的 Seam 管理的持久性上下文。

    记住Seam 通过@In-jected 组件字段名称执行查找。例如:

    @In
    EntityManager entityManager;
    

    因为EntityManager的字段名是entityManager,Seam会使用这个名字进行分层搜索;

    Here 和 here 你可以看到如何设置 Seam Managed Persistence 上下文。

    问候,

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 2014-11-06
      • 2019-07-03
      • 2011-11-07
      • 2011-12-20
      • 1970-01-01
      相关资源
      最近更新 更多