IllegalStateException:重用 ArchiveDescriptor;可以使用 WildFly 多次处理 URL Java 8

IllegalStateException: ArchiveDescriptor reused; can URLs be processed multiple times using WildFly Java 8

我们正在将 Java 7 和 JBoss 7 迁移到 Wildfly 和 Java 8。

我已经添加了所有可用的焊接库,因为错误提示缺少 weldClass。

过程中出现错误

    2015-06-22 10:16:56,694 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 59) MSC000001: Failed to start service jboss.persistenceunit."foo_all.ear/foo_sb.jar#foo": org.jboss.msc.service.StartException in service jboss.persistenceunit."foo_all.ear/foo_sb.jar#foo": java.lang.IllegalStateException: ArchiveDescriptor reused; can URLs be processed multiple times?
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.run(PersistenceUnitServiceImpl.java:172) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.run(PersistenceUnitServiceImpl.java:117) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]
    at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.8.0_45]
    at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:474)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.run(PersistenceUnitServiceImpl.java:182) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_45]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_45]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_45]
    at org.jboss.threads.JBossThread.run(JBossThread.java:122)
Caused by: java.lang.IllegalStateException: ArchiveDescriptor reused; can URLs be processed multiple times?
    at org.hibernate.jpa.boot.scan.spi.AbstractScannerImpl.validateReuse(AbstractScannerImpl.java:223) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
    at org.hibernate.jpa.boot.scan.spi.AbstractScannerImpl.buildArchiveDescriptor(AbstractScannerImpl.java:102) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
    at org.hibernate.jpa.boot.scan.spi.AbstractScannerImpl.scan(AbstractScannerImpl.java:70) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.scan(EntityManagerFactoryBuilderImpl.java:725) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:221) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
    at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:51) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:182) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:177) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
    at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
    at de.foo.bbis.srv.persistenceprovider.fooHibernatePersistenceProvider.createContainerEntityManagerFactory(fooHibernatePersistenceProvider.java:94) [foo_sb.jar:]
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:318) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.access00(PersistenceUnitServiceImpl.java:67) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.run(PersistenceUnitServiceImpl.java:167) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]
    ... 8 more

2015-06-22 10:16:56,923 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) JBAS014613: Operation ("deploy") failed - address: ([("deployment" => "foo_all.ear")]) - failure description: {
    "JBAS014671: Failed services" => {"jboss.persistenceunit.\"foo_all.ear/foo_sb.jar#foo\"" => "org.jboss.msc.service.StartException in service jboss.persistenceunit.\"foo_all.ear/foo_sb.jar#foo\": java.lang.IllegalStateException: ArchiveDescriptor reused; can URLs be processed multiple times?
    Caused by: java.lang.IllegalStateException: ArchiveDescriptor reused; can URLs be processed multiple times?"},
    "JBAS014771: Services with missing/unavailable dependencies" => ["jboss.deployment.unit.\"foo_all.ear\".weld.weldClassIntrospector is missing [jboss.deployment.unit.\"foo_all.ear\".beanmanager]"]
}

可以部署ear文件,可以启动服务器。但是在创建 ear 文件之后,必须在主部署的根目录中部署一个子部署。我们使用自定义 PersistenceProvider

持久性 xml 看起来像这样:

  <?xml version="1.0" encoding="UTF-8"?>
<persistence 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_1.xsd"
    version="2.1">
    <persistence-unit name="foo">
        <provider>de.foo.srv.persistenceprovider.fooHibernatePersistenceProvider</provider>
        <jta-data-source>java:/foo</jta-data-source>
        <jar-file>foo_sb.jar</jar-file>
        <properties>
            <property name="jboss.as.jpa.adapterModule" value="org.jboss.as.jpa.hibernate:4" />
        </properties>
    </persistence-unit>
</persistence>

我解决了这个问题。我的问题是 persistence.xml.

中的这一行
 <jar-file>foo_sb.jar</jar-file>

jar 文件标签适用于 JBoss AS7,但不适用于使用 Hibernate 4.3.7 的 WildFly 8。

我无法解释为什么不。也许 Wildfly/JBoss 专家可以提供有关此的更多详细信息。希望对某人有所帮助。

并且您需要删除 Hibernate 属性,因为它是 WildFly 8 附带的。这一行:

<property name="jboss.as.jpa.adapterModule" value="org.jboss.as.jpa.hibernate:4" />