我几乎是 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>
答案 0 :(得分:0)
感谢您的帮助。
我试图在构造函数中访问EntityManager ...由于初始化过程,这是不可能的。
现在我将初始加载(databaseaccess)放在@ PostConstruct-annotated方法中,这非常有效。