我正在处理和Spring数据。
我有三个项目:
)的Jar模块。
doc和sign与data-ws有依赖关系,所以数据-ws.jar包含在doc-ws.war和签署-ws.war中。
当我单独部署doc web应用程序时,所有的web服务测试都可以正常工作。当我单独部署签署-ws web应用程序时,所有的web服务测试都可以正常工作。但是,当我将两个web应用程序部署在同一个JBossEAP7.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 EAP7.1,spring JPA2.0.5,eclipseling2.6.4,spring core 3.0.1。
知道我为什么会有这个例外吗?我怎么能解决呢?
谢谢
发布于 2019-10-14 12:58:41
我发现了问题所在。当我定义'entityManagerFactory‘时,我没有设置名为'persistenceUnitName’的属性。然后,在创建持久性上下文时,将在两个web项目中使用“默认”的名称创建该上下文。
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter" ref="jpaAdapter" />
<property name="jpaDialect" ref="jpaDialect"/>
<property name="packagesToScan" value="com.ieci.mugeju.data.entity" />
...
</bean>我不知道为什么,但是第二个项目的“查找存储库方法”返回在第一个项目类装入器中定义的jpa实体类。非常奇怪的行为,我期望每个web应用程序使用自己的类加载程序,并相互隔离。
如果我为每个项目设置了一个persistenceUnitName,那么一切都很好,每个web应用程序都使用自己的类加载器。
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter" ref="jpaAdapter" />
<property name="jpaDialect" ref="jpaDialect"/>
<property name="packagesToScan" value="com.ieci.mugeju.data.entity" />
<property name="persistenceUnitName" value="${spring.application.name}" />
...
</bean>https://stackoverflow.com/questions/58372920
复制相似问题