我正在使用Spring Web Services和Spring JPA数据。
我有三个项目:
Doc-ws和sign-ws与data-ws有依赖性,因此data-ws.jar包含在doc-ws.war和sign-ws.war中。
当我单独部署doc-ws Web应用程序时,所有Web服务测试都可以正常工作。当我单独部署sign-ws Web应用程序时,所有Web服务测试都可以正常工作。但是,当我将两个Web应用程序一起部署在同一个Jboss EAP 7.1中时,执行Web服务测试时会出现ClassCastExceptions。
java.lang.ClassCastException:com.ieci.mugeju.data.entity.IdocConfiguration无法转换为com.ieci.mugeju.data.entity.IdocConfiguration
List<IdocConfiguration> properties = idocConfigurationRepository.findAll(); <-- works fine
for (IdocConfiguration property: properties) <-- Here throws the ClassCastException
{
.... // CODE
}
异常消息引用相同的jpa实体(com.ieci.mugeju.data.entity.IdocConfiguration),所以我不明白为什么会引发此异常。
这肯定是两个Web应用程序之间的类加载问题,但我不确定。
我正在使用JBoss EAP 7.1,spring-data-jpa 2.0.5,eclipseling 2.6.4,spring-ws-core 3.0.1。
知道我为什么要收到此例外?我该如何解决?
谢谢
我发现了问题所在。定义“ entityManagerFactory”时,没有设置名为“ persistenceUnitName”的属性。然后,在创建持久性上下文时,在两个Web项目中都以名称“ default”创建了持久性上下文。
我不知道为什么,但是第二个项目的“查找存储库方法”返回在第一个项目类加载器中定义的jpa实体类。非常奇怪的行为,我希望每个Web应用程序都使用自己的类加载器,并且彼此隔离。
如果我为每个项目都设置一个persistenceUnitName,则一切正常,每个Web应用程序都使用自己的类加载器。