带有spring-data-jpa的ClassCastException

问题描述 投票:0回答:1

我正在使用Spring Web Services和Spring JPA数据。

我有三个项目:

  • doc-ws。 Web应用程序,它是我的文档Web服务的终结点。
  • sign-ws。 Web应用程序,它是我的Sign Web服务的终结点。
  • data-ws。 Jar模块包含所有jpa实体(@Entity),spring jpa存储库(@Repository)和spring服务类(@Services)。

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。

知道我为什么要收到此例外?我该如何解决?

谢谢

jboss spring-data-jpa classcastexception spring-ws classloading
1个回答
0
投票

我发现了问题所在。定义“ entityManagerFactory”时,没有设置名为“ persistenceUnitName”的属性。然后,在创建持久性上下文时,在两个Web项目中都以名称“ default”创建了持久性上下文。

我不知道为什么,但是第二个项目的“查找存储库方法”返回在第一个项目类加载器中定义的jpa实体类。非常奇怪的行为,我希望每个Web应用程序都使用自己的类加载器,并且彼此隔离。

如果我为每个项目都设置一个persistenceUnitName,则一切正常,每个Web应用程序都使用自己的类加载器。

© www.soinside.com 2019 - 2024. All rights reserved.