Jpa 容器管理的EntityManger在注入时为空
我几乎不熟悉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,在我的项目中使用以下代码: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,在我的项目
@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>