Я установил wildfly 8.1 и, поскольку у меня уже есть проект, настроенный на использование EclipseLink, я попытался настроить wildfly для его использования.

Однако всегда выдает одну и ту же ошибку:

at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:166) [wildfly-server-8.1.0.Final.jar:8.1.0.Final]
 at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
 at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_25]
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_25]
 at java.lang.Thread.run(Thread.java:724) [rt.jar:1.7.0_25]
Caused by: javax.persistence.PersistenceException: JBAS011466: PersistenceProvider '
org.eclipse.persistence.jpa.PersistenceProvider
' not found
 at org.jboss.as.jpa.processor.PersistenceUnitServiceHandler.lookupProvider(PersistenceUnitServiceHandler.java:990)
 at org.jboss.as.jpa.processor.PersistenceUnitServiceHandler.addPuService(PersistenceUnitServiceHandler.java:258)
 at org.jboss.as.jpa.processor.PersistenceUnitServiceHandler.handleWarDeployment(PersistenceUnitServiceHandler.java:191)
 at org.jboss.as.jpa.processor.PersistenceUnitServiceHandler.deploy(PersistenceUnitServiceHandler.java:126)
 at org.jboss.as.jpa.processor.PersistenceBeginInstallProcessor.deploy(PersistenceBeginInstallProcessor.java:52)
 at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:159) [wildfly-server-8.1.0.Final.jar:8.1.0.Final]
 ... 5 more

Я выполнил инструкции официальной документации , но ничего не изменилось. Я добавил банку eclipseLink в "модули \ система \ слои \ основа \ орг \ затмение \ постоянство \ основная" и module.xml:

<module xmlns="urn:jboss:module:1.3" name="org.eclipse.persistence">
    <resources>
        <resource-root path="jipijapa-eclipselink-1.0.1.Final.jar"/>
        <resource-root path="eclipselink.jar"/>
    </resources>

    <dependencies>
        <module name="asm.asm"/>
        <module name="javax.api"/>
        <module name="javax.annotation.api"/>
        <module name="javax.enterprise.api"/>
        <module name="javax.persistence.api"/>
        <module name="javax.transaction.api"/>
        <module name="javax.validation.api"/>
        <module name="javax.xml.bind.api"/>
        <module name="org.antlr"/>
        <module name="org.apache.commons.collections"/>
        <module name="org.dom4j"/>
        <module name="org.javassist"/>
        <module name="org.jboss.as.jpa.spi"/>
        <module name="org.jboss.logging"/>
        <module name="org.jboss.vfs"/>
    </dependencies>
</module>

Вы знаете, в чем проблема?

Tks

Изменить : Мой persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="AppPu">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>java:/H2Ds</jta-data-source>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
    </persistence-unit>
</persistence>
7
Seb 10 Сен 2014 в 17:34
Вы можете показать мне файл persistence.xml?
 – 
Krzysztof Miksa
11 Сен 2014 в 03:29
1
Я отредактировал свой пост и добавил свой файл persistence.xml
 – 
Seb
11 Сен 2014 в 10:45

5 ответов

Лучший ответ

Наконец-то я решил проблему!

На самом деле у меня есть составной модуль, все файлы persistence.xml верны, но файл persistence.xml, в котором объявлен составной модуль, был плохим заявлением поставщика:

<provider>
   org.eclipse.persistence.jpa.PersistenceProvider
</provider>

Заменен на :

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

И теперь работают нормально.

5
Seb 12 Сен 2014 в 12:05
9
Нет никакой разницы между двумя способами: с символами новой строки или без них. Так что это не то, что решило вашу проблему.
 – 
V G
12 Сен 2014 в 17:53
Для меня это большая разница! Теперь я развертываю без ошибок. Ради интереса я попытался вставить разрыв строки после тега провайдера и воспроизвел ошибку!
 – 
Seb
12 Сен 2014 в 19:35
1
Очень странно. Но глядя на трассировку стека, это имеет смысл
 – 
Krzysztof Miksa
16 Сен 2014 в 16:41

Новые строки в разделе провайдера файла persistence.xml не будут работать (как это может помочь?). Wildfly не имеет реализации eclipseLink в библиотеках. Чтобы исправить это, выполните следующие действия:

  1. Загрузите eclipselink.jar (или скопируйте из репозитория maven)
  2. Скопируйте его в место назначения: ... Wildfly \ modules \ system \ Layers \ base \ org \ eclipse \ persistence \ main
  3. Отредактируйте module.xml (тот же путь). Добавить раздел <resource-root path="eclipselink.jar"><filter><exclude path="javax/**" /></filter></resource-root>

После перезагрузки сервера все должно заработать.

14
graczun 28 Авг 2015 в 15:52
2
 – 
Lorenzo Lerate
24 Мар 2017 в 14:40

Вам необходимо добавить провайдера в блок сохранения состояния в persistence.xml:

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
3
Krzysztof Miksa 11 Сен 2014 в 11:11
Ой! просто ошибка в копировании / вставке, но мой файл persistence.xml содержит объявление поставщика! Я решил проблему, я делаю ответ, чтобы объяснить это.
 – 
Seb
11 Сен 2014 в 20:55

Официальный документ о том, как настроить модуль eclipselin, и необходимое системное свойство для активации vfs acrhieve factory impl приведены здесь:

https://docs.jboss.org/author/display/WFLY10/JPA+Reference+Guide#JPAReferenceGuide-UsingEclipseLink

Для модуля сделайте что-то вроде:

<module xmlns="urn:jboss:module:1.1" name="org.eclipse.persistence">
    <resources>
        <resource-root path="jipijapa-eclipselink-10.0.0.Final.jar"/>
        <resource-root path="eclipselink.jar">           
           <filter>
              <exclude path="javax/**" />
           </filter>
        </resource-root>
    </resources>

    <dependencies>
        <module name="asm.asm"/>
        <module name="javax.api"/>
        <module name="javax.annotation.api"/>
        <module name="javax.enterprise.api"/>
        <module name="javax.persistence.api"/>
        <module name="javax.transaction.api"/>
        <module name="javax.validation.api"/>
        <module name="javax.xml.bind.api"/>
        <module name="javax.ws.rs.api"/>
        <module name="org.antlr"/>
        <module name="org.apache.commons.collections"/>
        <module name="org.dom4j"/>
        <module name="org.jboss.as.jpa.spi"/>
        <module name="org.jboss.logging"/>
        <module name="org.jboss.vfs"/>
    </dependencies>
</module>

Для системного свойства выполните следующее:

<system-properties>
   ...
   <property name="eclipselink.archive.factory" value="org.jipijapa.eclipselink.JBossArchiveFactoryImpl"/>
</system-properties>

Наконец, не начинайте добавлять в свой persistence.xml какие-либо специфические для контейнера свойства, например:

<property name="eclipselink.target-server" value="JBoss" />

Это совершенно неверно. Wildfly уже позаботился о том, чтобы установить правильную платформу целевого сервера в свои:

Org.jipijapa.eclipselink.EclipseLinkPersistenceProviderAdaptor

Вот пример кода из их класса:

  @SuppressWarnings({ "rawtypes", "unchecked" })
    @Override
    public void addProviderProperties(Map properties, PersistenceUnitMetadata pu) {
        if (!pu.getProperties().containsKey(ECLIPSELINK_TARGET_SERVER)) {
            properties.put(ECLIPSELINK_TARGET_SERVER, WildFlyServerPlatform.class.getName());
            properties.put(ECLIPSELINK_ARCHIVE_FACTORY, JBossArchiveFactoryImpl.class.getName());
            properties.put(ECLIPSELINK_LOGGING_LOGGER, JBossLogger.class.getName());
        }
    }

Возможно, вы захотите убедиться, что вы отлаживаете этот класс, чтобы убедиться, что он вызывается и правильно настраивает свойства вашего динамического блока сохранения состояния. Но не возитесь со свойствами persistence.xml, специфичными для контейнера. Wildfly делает это правильно, и они добавляют их сами.

Так что просто следуйте их документации, это лучший совет.

2
99Sono 23 Фев 2017 в 13:23

В EAP с пакетом обновлений существует ловушка, заключающаяся в том, что модуль org.eclipse.persistence действительно может находиться в дереве .overlays/ (modules/system/layers/base/.overlays/).

0
weberjn 21 Май 2019 в 17:20