2013-08-23 4 views
3

Я пытаюсь использовать EMF Texo в Glassfish 4, но когда я хочу, чтобы инициализировать EntityManagerProvider я получаю ошибку:Glassfish 4 с EMF TEXO - JPA Нет живучесть провайдер

javax.persistence.PersistenceException: No Persistence provider for EntityManager named HelloTexo

Я пытался реализовать учебник TEXO найдено here. Разница заключается в том, что я хочу, чтобы работать на Glassfish 4.

Беллоу мой код:

web.xml:

<listener> 
    <listener-class>texo.web.TexoContextListener</listener-class> 
</listener> 

<filter> 
    <filter-name>emFilter</filter-name> 
    <filter-class>org.eclipse.emf.texo.server.store.CurrentEntityManagerRequestFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>emFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

TexoContextListener.java

import javax.servlet.ServletContextListener; 
import org.eclipse.emf.texo.server.service.ServiceModelPackageRegistry; 
import org.eclipse.emf.texo.server.store.EntityManagerProvider; 
import org.eclipse.emf.texo.test.model.base.identifiable.IdentifiableModelPackage; 

public class TexoContextListener implements ServletContextListener{ 

@Override 
public void contextInitialized(ServletContextEvent arg0) { 
    ServiceModelPackageRegistry.getInstance().register(IdentifiableModelPackage.INSTANCE); 
    EntityManagerProvider.getInstance().setPersistenceUnitName("HelloTexo"); 
    // initialize aggressively 
    EntityManagerProvider.getInstance().initialize(); 
} 
@Override 
public void contextDestroyed(ServletContextEvent arg0) { 
    // TODO Auto-generated method stub 

} 

}

В отладке я получаю ошибку, упомянутую выше, когда я пытаюсь инициализировать() EntityManagerProvider.

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="HelloTexo" transaction-type="JTA"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <jta-data-source>jdbc/__MySQLDataSource</jta-data-source> 
    </persistence-unit> 
</persistence> 

Я создал этот файл автоматически путем добавления JPA Project Facet для моего проекта с Eclipse. Соединение с базой данных является успешным. Я попытался переместить persistence.xml в WEB-INF/classes/META-INF /, но я все равно получаю ту же ошибку.

Любая идея, что может вызвать ошибку? Я застрял здесь уже несколько дней ... Я действительно надеюсь, что кто-то сможет дать мне идее.

ответ

0

Возможно возникновение конфликта загрузчика классов. Glassfish4 включает EclipseLink в пути библиотеки контейнеров. Попробуйте удалить свой явный тег <provider> и любые java-пакеты java из папки WEB-INF/lib. Стандартная Glassfish javax.persistence.jar должна быть все, что вам нужно.

+0

Спасибо! Ваше замечание относительно конфликта загрузчика классов решило проблему. Я удалил все jpa-реализации jars из WEB-INF/lib и прокомментировал тег . Для тех, у кого проблемы с Texo ... Я также удалил из Glassfish все текс-банки и просто сохранил их в своей папке WEB-INF/lib. – Monica