为什么EntityManager为空?

在我的Web应用程序中,我在Apache Tomcat(TomEE)/7.0.37服务器上使用OpenJPA。 我使用Netbeans自动生成类(“来自数据库的实体类……”和“来自实体类的会话Bean ……”)。 在SessionBean(例如UserFacade)我想获得EntityManager:

@Stateless public class UserFacade extends AbstractFacade { @PersistenceContext(unitName = "CollDocPU") private EntityManager em; @Override protected EntityManager getEntityManager() { return em; } } 

但是当我通过上面的方式得到它时,我得到了null。 当我通过:

 @Override protected EntityManager getEntityManager() { EntityManagerFactory emf = Persistence.createEntityManagerFactory("CollDocPU"); EntityManager ecm = emf.createEntityManager(); return ecm; } 

ecm不是null,没关系

我的persistence.xml:

    org.apache.openjpa.persistence.PersistenceProviderImpl model.entity.StudentAddSolution model.entity.Lecturer model.entity.Solution model.entity.Student model.entity.Course model.entity.File model.entity.CourseHasLecturer model.entity.Mail model.entity.StudentAtCourse model.entity.Roles model.entity.Task model.entity.User false          

从中获取非EntityManager

 @PersistenceContext(unitName = "CollDocPU") private EntityManager em; 

我必须更改我的persistance.xml,将事务类型更改为“JTA”并添加:

 java:openejb/Resource/myDatabase java:openejb/Resource/myDatabaseUnmanaged 

之后,我必须在我的服务器配置中声明资源:在[tomee安装文件夹] /conf/tomee.xml文件中:

    JdbcDriver com.mysql.jdbc.Driver JdbcUrl jdbc:mysql://localhost:11080/jkitaj?zeroDateTimeBehavior=convertToNull UserName jkitaj Password pass,   JdbcDriver com.mysql.jdbc.Driver JdbcUrl jdbc:mysql://localhost:11080/jkitaj?zeroDateTimeBehavior=convertToNull UserName jkitaj Password pass, JtaManaged false   

看这里:

http://openejb.979440.n4.nabble.com/org-apache-openjpa-lib-jdbc-ReportingSQLException-type-not-found-or-user-lacks-privilege-td4665124.html

http://mobiarch.wordpress.com/2012/12/07/configuring-a-mysql-data-source-in-tomee/

persistence.xml文件应位于META-INF文件夹下。 请查看此文档以了解结构。