Jpa 容器管理的EntityManger在注入时为空

Jpa 容器管理的EntityManger在注入时为空,jpa,ejb,Jpa,Ejb,我几乎不熟悉JavaEE(JRE7/JDK1.7.0),并且在Eclipse(Luna)上启动了我的第一个(基于maven的)项目 Applicationserver是JBossEAP6.2.0.GA(AS 7.3.0.Final-redhat-14),我通过添加jsf-api-2.2.7.jar和jsf-impl-2.2.7.jar并在module.xml中注册,将其更新为JSF2.2,顺便说一句,这非常好用 问题是,为什么我不能使用注入从容器(AS)获取EntityManager,在我的项目

我几乎不熟悉JavaEE(JRE7/JDK1.7.0),并且在Eclipse(Luna)上启动了我的第一个(基于maven的)项目

Applicationserver是JBossEAP6.2.0.GA(AS 7.3.0.Final-redhat-14),我通过添加jsf-api-2.2.7.jar和jsf-impl-2.2.7.jar并在module.xml中注册,将其更新为JSF2.2,顺便说一句,这非常好用

问题是,为什么我不能使用注入从容器(AS)获取EntityManager,在我的项目中使用以下代码:

@Stateless
public class SCatRep {

    @PersistenceContext
    EntityManager em;

    private ...
*在persistence.xml中,只定义了一个persistenceunit。所以不需要进一步的论证。。。在我看来

另一方面,当我试图通过查找从容器中获取EntityManager时,EntityManager存在,并且一切正常。我使用此代码(用于测试):

我读了很多论坛和教程——因为这种行为被讨论了很多——但却找不到解决方案或答案。希望有人能帮我,给我指出正确的方向

提前谢谢

编辑:

我正在使用EJB3.1。下面是persistence.xml:


java:/scha_jndi
谢谢您的帮助

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


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

post your persistence.xml以及使用EJB3.0或EJB3.1的RU?您确定没有尝试访问构造函数中的
em
字段吗<当构造函数运行时,code>em将等于
null
。如果您必须初始化无状态bean,那么您必须在标记为
@PostConstruct
的方法中进行初始化,您如何获得SCatRep实例?如果您像使用任何java类一样使用它,并且只是创建一个实例,那么注入将不起作用。必须从容器中获取,并对容器进行管理以进行注射。
@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();
    }
    }
<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>