0

问题仍在继续(未创建 struts 2 bean) 我在 Tomcat 下的非常简单的 Web 应用程序中使用 struts2 + toplink。在页面上我想使用迭代标签。这就是为什么我声明了一些工厂(SomeFactory)来解析实体(Entity)的集合。每篇文章: http: //download-uk.oracle.com/docs/cd/B32110_01/web.1013/b28221/usclient005.htm#CIHCEHHG 我唯一需要的是声明:

@PersistenceContext(unitName="name_in_persistence_xml")
public class SomeFactory
{
    @PersistenceUnit(unitName="name_in_persistence_xml")
    EntityManagerFactory emf;

    public EntityManager getEntityManager() {
       assert(emf != null); //HERE every time it is null
       return emf.createEntityManager();
    }
    public Collection<Entity> getAll()
    {
       return getEntityManager().createNamedQuery("Entity.findAll").getResultList();
}
}

怎么了?可能我错过了 web.xml 中的某些内容吗?如何为 Web 应用程序预初始化 toplink 以允许注入发生?

4

1 回答 1

0

您不会得到不是 Java EE 容器的 Tomcat 注入的任何东西(即使使用 Java EE 5 容器,注入也仅适用于托管组件,如 servlet、过滤器、侦听器、EJB、Web 服务端点......)。因此,您必须EntityManagerFactory手动创建(通常在 servlet 或帮助程序类中)并从中获取EntityManager

EntityManagerFactory emf  = Persistence.createEntityManagerFactory(PU_NAME);
EntityManager entityManager = emf.createEntityManager();

请注意,创建 anEntityManagerFactory是一项昂贵的操作,不应针对每个请求进行。但是,创建EntityManager不是,您应该为每个线程获取一个。但在你的情况下,我建议使用struts2-persistenceplugin来处理这个问题。

谢谢,但似乎 [...] Java EE 不是强制使用注入 [...] Spring 为它带来了必要的引擎。

的确。但是您在另一个问题中写了“根本没有弹簧”,并且您没有列出任何可以开箱即用的注射剂。无论如何,请查看 struts2-persistenceplugin,它可能足以满足您的需求。

于 2010-04-04T09:49:47.403 回答