Я установил 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>
5 ответов
Наконец-то я решил проблему!
На самом деле у меня есть составной модуль, все файлы persistence.xml верны, но файл persistence.xml, в котором объявлен составной модуль, был плохим заявлением поставщика:
<provider>
org.eclipse.persistence.jpa.PersistenceProvider
</provider>
Заменен на :
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
И теперь работают нормально.
Новые строки в разделе провайдера файла persistence.xml не будут работать (как это может помочь?). Wildfly не имеет реализации eclipseLink в библиотеках. Чтобы исправить это, выполните следующие действия:
- Загрузите eclipselink.jar (или скопируйте из репозитория maven)
- Скопируйте его в место назначения: ... Wildfly \ modules \ system \ Layers \ base \ org \ eclipse \ persistence \ main
- Отредактируйте module.xml (тот же путь). Добавить раздел
<resource-root path="eclipselink.jar"><filter><exclude path="javax/**" /></filter></resource-root>
После перезагрузки сервера все должно заработать.
Вам необходимо добавить провайдера в блок сохранения состояния в persistence.xml
:
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
Официальный документ о том, как настроить модуль 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 делает это правильно, и они добавляют их сами.
Так что просто следуйте их документации, это лучший совет.
В EAP с пакетом обновлений существует ловушка, заключающаяся в том, что модуль org.eclipse.persistence
действительно может находиться в дереве .overlays/
(modules/system/layers/base/.overlays/
).
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.