如何配置wildfly以使用EclipseLink?

时间:2014-09-10 13:34:08

标签: java eclipselink wildfly wildfly-8

我安装了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

我虽然遵循official documentation的指示,但没有改变! 我已将eclipseLink的jar添加到" modules \ system \ layers \ base \ org \ eclipse \ persistence \ main" 和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>

你知道这是什么问题吗?

韩国社交协会

修改: 我的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 个答案:

答案 0 :(得分:12)

persistence.xml的provider部分中的新行无法工作(它有什么用?)。 Wildfly还没有在libs中提供eclipseLink实现。要解决此问题,请按以下步骤操作:

  1. 下载eclipselink.jar(或从您的maven回购中复制)
  2. 将其复制到 目的地: ... Wildfly \模块\ SYSTEM \层\基\有机\蚀\持久\主
  3. 编辑module.xml(相同路径)。添加部分 <resource-root path="eclipselink.jar"><filter><exclude path="javax/**" /></filter></resource-root>
  4. 服务器重启后,一切都应该有效。

答案 1 :(得分:5)

最后我解决了这个问题!

实际上,我有一个复合单元,所有persistence.xml都是正确的,但声明复合单元的persistence.xml是提供者的错误声明:

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

替换为:

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

现在工作正常。

答案 2 :(得分:3)

您需要在persistence.xml

中将提供者添加到持久性单元
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

答案 3 :(得分:2)

这里给出了关于如何配置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正在这样做,他们自己添加它们。

所以,只需按照他们的文档,这是最好的建议。

答案 4 :(得分:0)

在带有Service Pack的EAP中,存在一个陷阱,即org.eclipse.persistence模块实际上可能在.overlays/树(modules/system/layers/base/.overlays/)中。