почему EntityManager имеет значение null?
в моем веб-приложении я использую OpenJPA на сервере Apache Tomcat (TomEE)/7.0.37. Я использую Netbeans для автоматического создания класса ("класс сущности из базы данных..."и" сеансовые бобы из класса Entity..."). В SessionBean (например, UserFacade) я хочу получить EntityManager:
@Stateless
public class UserFacade extends AbstractFacade<User> {
@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 не является нулевым, и это ok
мою настойчивость.XML-код:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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">
<persistence-unit name="CollDocPU" transaction-type="RESOURCE_LOCAL">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<class>model.entity.StudentAddSolution</class>
<class>model.entity.Lecturer</class>
<class>model.entity.Solution</class>
<class>model.entity.Student</class>
<class>model.entity.Course</class>
<class>model.entity.File</class>
<class>model.entity.CourseHasLecturer</class>
<class>model.entity.Mail</class>
<class>model.entity.StudentAtCourse</class>
<class>model.entity.Roles</class>
<class>model.entity.Task</class>
<class>model.entity.User</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:11080/myBase?zeroDateTimeBehavior=convertToNull"/>
<property name="javax.persistence.jdbc.password" value="pass,"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="myBase"/>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
</properties>
</persistence-unit>
</persistence>
2 ответов
чтобы получить NOT null EntityManager из
@PersistenceContext(unitName = "CollDocPU")
private EntityManager em;
Я должен изменить мое намерение.xml, измените тип транзакции на " JTA " и добавьте:
<jta-data-source>java:openejb/Resource/myDatabase</jta-data-source>
<non-jta-data-source>java:openejb/Resource/myDatabaseUnmanaged</non-jta-data-source>
после этого я должен объявить ресурсы в моей конфигурации сервера :в папке установки [tomee]/conf / tomee.xml-файл:
<?xml version="1.0" encoding="UTF-8"?>
<tomee>
<Resource id="myDatabase" type="DataSource">
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://localhost:11080/jkitaj?zeroDateTimeBehavior=convertToNull
UserName jkitaj
Password pass,
</Resource>
<Resource id="myDatabaseUnmanaged" type="DataSource">
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://localhost:11080/jkitaj?zeroDateTimeBehavior=convertToNull
UserName jkitaj
Password pass,
JtaManaged false
</Resource>
</tomee>
посмотреть там:
http://mobiarch.wordpress.com/2012/12/07/configuring-a-mysql-data-source-in-tomee/
на настойчивость.в XML файл должен находиться в папке META-INF. Проверка этой документация для понимания структуры.