在JBoss EAP 7下,Deltaspike init失败
问题描述:
EAR应用程序由EJB模块+ WAR模块组成。两者都取决于Deltaspike(1.8.0)库。 虽然部署下的JBoss EAP 7.0的应用程序时,输出显示以下异常:从WAR模块CDI视点扩展ONY在JBoss EAP 7下,Deltaspike init失败
Caused by: java.util.ServiceConfigurationError: org.apache.deltaspike.core.spi.config.ConfigSourceProvider: Provider org.apache.deltaspike.core.impl.config.DefaultConfigSourceProvider not a subtype
at java.util.ServiceLoader.fail(ServiceLoader.java:239)
at java.util.ServiceLoader.access$300(ServiceLoader.java:185)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
at org.apache.deltaspike.core.util.ServiceUtils.loadServiceImplementations(ServiceUtils.java:66)
的问题发生。 EJB模块的初始化是正确的。
战争发生了什么问题。这是配置问题吗?
答
是的,这是一个配置问题,正如James R. Perkins在评论中提出的那样。
如果打开EAR(在任何ZIP文件浏览器),你会发现,有Deltaspike库的两个副本:
application.ear
├── lib
│ ├── deltaspike-core-api-1.x.y.jar
│ └── deltaspike-core-impl-1.x.y.jar
├── application.war
| └── WEB-INF
│ └── lib
│ ├── deltaspike-core-api-1.w.z.jar
│ └── deltaspike-core-impl-1.w.z.jar
这混淆的类加载器,并导致上述错误。
为了解决这个问题,标志着Deltaspike库作为WAR POM <scope>provided</scope>
,使他们不会被捆绑到WAR WEB-INF/lib
:
<dependency>
<groupId>org.apache.deltaspike.core</groupId>
<artifactId>deltaspike-core-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.deltaspike.core</groupId>
<artifactId>deltaspike-core-impl</artifactId>
<scope>provided</scope>
</dependency>
我有一个类似的问题,并能够解决这种方式。
你如何安装Deltaspike?看起来你已经安装了两个版本的Deltaspike。 –
嵌入在EAR应用程序中的EJB和WAR模块都使用deltaspike模块。他们正在使用相同的版本。加载EJB容器和Web应用程序时似乎有些不好。 EJB加载工作正常,但webapp加载失败。 – ruddy32
对不起,我不应该使用“版本”。它看起来像是Deltaspike被加载到两个不同的类加载器上。 EAR/lib'目录中是Deltaspike吗?确保你的'EAR/WAR/WEB-INF/lib'目录中没有Deltaspike库。 –