注入时容器管理的EntityManager为null

时间:2014-07-25 10:33:57

标签: jpa ejb

我几乎是 JavaEE (JRE7 / JDK1.7.0)的新手,并且是我在 Eclipse (Luna)上的第一个(基于maven)项目。

Applicationserver是 JBoss EAP 6.2.0.GA(AS 7.3.0.Final-redhat-14),我通过添加更新到JSF2.2 jsf-api-2.2.7.jar jsf-impl-2.2.7.jar 并在 module.xml 中注册 - 这完美适用于方式。

问题 /问题是,为什么我无法通过注入从容器(AS)获取EntityManager,我的项目中包含以下代码:

@Stateless
public class SCatRep {

    @PersistenceContext
    EntityManager em;

    private ...

*在 persistence.xml 中,只定义了一个持久性单元。因此,在我看来,没有必要进一步论证?!

另一方面,当我尝试从查找的容器中获取EntityManager时,EntityManager存在并且一切正常。我使用了这段代码(用于测试):

@Stateless
@PersistenceContext(unitName="scha", name="persistence/em")
public class SCatRep {

    EntityManager em;

    public SCatRep() {
    try {
        Context ic = new InitialContext();
        em = (EntityManager) ic.lookup("java:comp/env/persistence/em");
    } catch (NamingException e) {
        e.printStackTrace();
    }
    }

我阅读了很多论坛和教程 - 因为这个行为已经讨论了很多 - 但无法得到解决方案或答案。希望有人能帮助我并指出正确的方向。

提前致谢。

修改

我正在使用EJB 3.1。这是 persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">
    <persistence-unit name="scha" transaction-type="JTA">
        <jta-data-source>java:/scha_jndi</jta-data-source>
        <properties>
            <!-- SQL dialect -->
            <property name="dialect" value="org.hibernate.dialect.MySQLDialect" />
            <!-- Enable Hibernate's automatic session context management -->
            <property name="current_session_context_class" value="thread" />
            <!-- Echo all executed SQL to stdout -->
            <property name="show_sql" value="true" />
        </properties>
    </persistence-unit>
</persistence>

1 个答案:

答案 0 :(得分:0)

感谢您的帮助。

我试图在构造函数中访问EntityManager ...由于初始化过程,这是不可能的。

现在我将初始加载(databaseaccess)放在@ PostConstruct-annotated方法中,这非常有效。

相关问题