Java jboss上的spring类装入器隔离问题

Java jboss上的spring类装入器隔离问题,java,jboss,classloader,Java,Jboss,Classloader,我在jboss上部署了两个EAR,具有适当的类装入器隔离设置。当SeamBean调用SpringBean对数据库进行一些查询时,一切正常,但当调用SpringQuartz作业bean并尝试执行数据库查询时,就会出现问题,因为spring也尝试从其他ear使用HibernateJAR,并引发异常!很明显,这是spring类装入器隔离问题。有人遇到过这样的问题吗?如何确保隔离?我敢打赌SEAM使用的Hibernate JAR来自JBOSS类装入器,它在任何EAR类装入器之前被调用。这是因为SEAM与

我在jboss上部署了两个EAR,具有适当的类装入器隔离设置。当SeamBean调用SpringBean对数据库进行一些查询时,一切正常,但当调用SpringQuartz作业bean并尝试执行数据库查询时,就会出现问题,因为spring也尝试从其他ear使用HibernateJAR,并引发异常!很明显,这是spring类装入器隔离问题。有人遇到过这样的问题吗?如何确保隔离?

我敢打赌SEAM使用的Hibernate JAR来自JBOSS类装入器,它在任何EAR类装入器之前被调用。这是因为SEAM与JBOSS捆绑在一起

Spring in the EAR使用的是不同版本的Hibernate JAR或其依赖项,因此会产生冲突

您要么必须从JBOSS中删除Hibernate JAR,使其不再对AppServer类加载器可见,但这可能会破坏SEAM


您可能会看到JBOSS是否有办法告诉应用服务器在EAR配置中更喜欢应用级JAR而不是服务器JAR。

假设JBOSS 4.x,然后在deploy/EAR-deployer.xml文件中,确保启用了类加载器隔离,例如

<server>
   <mbean code="org.jboss.deployment.EARDeployer" name="jboss.j2ee:service=EARDeployer">
      <attribute name="Isolated">true</attribute>
      <attribute name="CallByValue">false</attribute>
      <attribute name="EnablelibDirectoryByDefault">true</attribute>
   </mbean>
</server>
我不确定这是否有用,也不确定它的用途,但在某些情况下,它似乎加强了耳朵之间的隔离

<jboss-app>
  <loader-repository>MyCompany:loader=MyApplication</loader-repository>
</jboss-app>