JBoss7 и Eclipselink, нет поставщика сохраняемости для EntityManager - PullRequest
1 голос
/ 08 ноября 2011

У меня проблема с JBoss 7.02. Финал.Я портирую проект из JBoss5.1GA и (за исключением значительного количества переписываний в поисках поддержки EE6) у меня возникла проблема при регистрации Eclipselink на пути к классам.Я искал вокруг, и я вижу несколько сообщений о том, что эта проблема исправлена, но я не могу найти работающий пример.

Существует очень высокая вероятность того, что я делаю что-то не так, поскольку я новичок вРазработка EE6.

Ухо построено следующим образом

  - ProductionEE6
  ./lib/eclipselink2.*.jar
  ./lib/javax.persistence.jar
    . . .
    ProductionEJB.jar
    . . .
    Production.war

Мой файл 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 persistence_2_0.xsd">
    <persistence-unit name="production" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

        <non-jta-data-source>java:/ProductionDS</non-jta-data-source>
        <class><!-- entities --></class>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="eclipselink.target-server" value="JBoss"/> 
            <!-- A few other properties here -->
        </properties>       
    </persistence-unit>
</persistence>

Все загружается нормально, я вижу источники данных, я прохожу безопасность (через пользовательский модуль DatabaseModule, поэтому мои источники данных, безусловно, в порядке), и когда я наконец звоню в EJB, я вижу следующие ошибки:

Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named production
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69) [hibernate-jpa-2.0-api-1.0.1.Final.jar:1.0.1.Final]
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) [hibernate-jpa-2.0-api-1.0.1.Final.jar:1.0.1.Final]
    at com.danielbchapman.production.entity.DelegateInstance.getEm(DelegateInstance.java:67) [ProductionEJB.jar:]
    at com.danielbchapman.production.entity.EntityInstance.getEm(EntityInstance.java:39) [ProductionEJB.jar:]
    at com.danielbchapman.production.beans.OptionsDao.<init>(OptionsDao.java:20) [ProductionEJB.jar:]
    ... 94 more

В связи с этим я не использую источник данных JTA, поэтому обрабатывал транзакции вручную.Этот вызов - это «DelegateInstance» выше со следующим кодом: (где persistenceUnitId в данном случае «production»).

/**
 * @return an instance of the entity manager if it isn't there.
 */
public EntityManager getEm()
{
    if(manager == null)
    {
        manager = Persistence.createEntityManagerFactory(getPersistenceUnitId())
                .createEntityManager();
    }

    return manager;
}

Что меня больше всего беспокоит, так это видение настек: [hibernate-jpa-2.0-api-1.0.1.Final.jar: 1.0.1.Final] Очевидно, я не загружаю EclipseLink должным образом.У меня заканчиваются идеи, поэтому, если кто-нибудь сможет помочь, я буду очень благодарен.

Ответы [ 2 ]

1 голос
/ 30 мая 2012

EclipseLink 2.4 теперь будет работать с JBoss AS 7.1.1 - протестировано и работает - hth

0 голосов
/ 10 ноября 2011

Согласно http://dev.dzhokanov.com/?p=8:

Кроме того, эта ветка форума пришла в поддержку моей гипотезы - http://community.jboss.org/message/623759#623759

В теме Скотт Марлоу (ведущий разработчик JBoss 7 / JPA)признается:

«Вы не единственный, кто хочет использовать EclipseLink, но еще не готов.«

Насколько я понимаю, в реализации EclipseLink JPA есть некоторые несовместимости, которые необходимо отрегулировать, чтобы они были совместимы с JBoss 7. Поэтому я не ожидаю поддержки Jboss 7-EclipseLink в ближайшее время.

Так что, возможно, в настоящее время это вообще невозможно.Но если вы найдете способ, я был бы очень заинтересован в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...