2017-09-27 69 views
0

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模块的初始化是正确的。

战争发生了什么问题。这是配置问题吗?

+1

你如何安装Deltaspike?看起来你已经安装了两个版本的Deltaspike。 –

+0

嵌入在EAR应用程序中的EJB和WAR模块都使用deltaspike模块。他们正在使用相同的版本。加载EJB容器和Web应用程序时似乎有些不好。 EJB加载工作正常,但webapp加载失败。 – ruddy32

+1

对不起,我不应该使用“版本”。它看起来像是Deltaspike被加载到两个不同的类加载器上。 EAR/lib'目录中是Deltaspike吗?确保你的'EAR/WAR/WEB-INF/lib'目录中没有Deltaspike库。 –

回答

0

是的,这是一个配置问题,正如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> 

我有一个类似的问题,并能够解决这种方式。