2013-09-17 22 views
6

В моем веб-приложении я использую OpenJPA на сервере Apache Tomcat (TomEE)/7.0.37. Я использую Netbeans для автоматического создания класса («Entity Class from database ...» и «Session Beans From Entity Class ...»). В SessionBean (например UserFacade) я хочу получить EntityManager:Почему EntityManager имеет значение NULL?

@Stateless 
public class UserFacade extends AbstractFacade<User> { 
    @PersistenceContext(unitName = "CollDocPU") 
    private EntityManager em; 

    @Override 
    protected EntityManager getEntityManager() { 
    return em; 
    } 
} 

но когда я получить его выше способом я получаю пустой. Когда я сделать это с помощью:

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

ЕСМ не является нулевым, и это нормально

мой persistence.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> 
+0

Вы уверены, что поддержка EJB работает в среде TOMCAT? Как вы получаете экземпляр UserFacade? – Thomas

+0

Поделитесь своей структурой приложения. Я хотел бы проверить, где находится ваш persistence.xml – Gaurav

+0

@Thomas - я получаю UserFacade в открытом классе @ManagedBean RegisterController private String registerLog = ""; private String registerPass = ""; private @EJB UserFacade userFacade; ' – kuba44

ответ

2

Чтобы не нулевой EntityManager от

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

я должен изменить свою persistance.xml, изменение транзакции типа в «ССТ» и добавить:

<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://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/

+0

ваш ссылки не помогают. Можете ли вы упомянуть некоторые другие ссылки –

+0

@AbhishekRanjan, в чем проблема, могу ли я вам помочь? Вы спрашиваете об этом? – kuba44

+0

Я использую apache Tomee plus. Мне нужно объявить источник данных JTA, но я не знаю знать, где сохранить его свойства. –

0

persistence.xml файл должен находиться под META-INF папка. Проверьте документацию this, чтобы понять структуру.

+0

Я перемещаю persistence.xml в папку META-INF, но это не помогает. Entity менеджер является недействительным, когда я получаю его '@PersistenceContext (UnitName = "CollDocPU") частных EntityManager эм,' ' – kuba44

+0

@PersistenceContext (UnitName = "CollDocPU") частной EntityManagerFactory эдс;' тоже сделать эдс нуль :( – kuba44

Смежные вопросы