Сущность JPA найдена в модульных тестах, а не в EJB

У меня есть DAO, который использует JPA с источником данных, отличным от JTA, и транзакциями RESOURCE_LOCAL. Все мои модульные тесты, которые используют DAO, работают отлично (данные вставляются и извлекаются из базы данных).

Однако когда я развертываю свой EJB на своем сервере Weblogic 10.3.3, я получаю следующее исключение:

Caused by: java.lang.IllegalArgumentException: Unknown entity bean class: class com.foo.bar.CatalogEntity, please verify that this class has been marked with the @Entity annotation.
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:576)

Мой файл persistence.xml (в WEB-INF/classes/META-INF):

<?xml version="1.0" ?>
<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_1_0.xsd"
    version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="cmf-awe-service" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <non-jta-data-source>MyDataSource</non-jta-data-source>
        <class>com.foo.bar.CatalogEntity</class>
        <properties>
            <property name="eclipselink.cache.shared.default" value="false"/>
            <property name="eclipselink.query-results-cache" value="false"/>
            <property name="eclipselink.target-server" value="WebLogic_10" />
            <property name="eclipselink.logging.level" value="FINEST" />
        </properties>
    </persistence-unit>
</persistence>

Я подтвердил, что класс CatalogEntity находится в каталоге WEB-INF/classes. Любые идеи о том, почему это работает в модульных тестах, но не при развертывании на сервере приложений?


person Brian    schedule 23.08.2011    source источник
comment
Как вы развертываете ejb в WebLogic?   -  person Kal    schedule 23.08.2011
comment
Есть ли шанс, что вы тестируете реализацию JPA, отличную от той, которая используется на сервере приложений?   -  person G_H    schedule 23.08.2011
comment
@Kal Я развертываю с помощью класса Java weblogic.Deployer.   -  person Brian    schedule 23.08.2011
comment
@ Брайан, если у тебя есть EJB, почему твой persistence.xml в WEB-INF/classes/META-INF? Его нельзя поместить в сам EJB JAR?   -  person Vineet Reynolds    schedule 23.08.2011
comment
@ Брайан - мой вопрос был не очень ясен. Является ли ejb развернутым как часть уха или это банка сама по себе? Если это так, то файл persistence.xml должен находиться в этой банке ejb.   -  person Kal    schedule 23.08.2011
comment
EJB находится в состоянии WAR, а не EAR.   -  person Brian    schedule 05.09.2011


Ответы (1)


Брайан, у меня была такая же проблема... и я решил ее, добавив в свой компонент метод PreDestroy, который закрывает EntityManagerFactory:

@PreDestroy
public void close()
{
    emf.close();
}

Я надеюсь это тебе поможет! Пожалуйста, проголосуйте, если получится...

person André    schedule 01.12.2011