将相同EJB和类的多个版本部署到同一JBoss服务器

Bru*_*mmo 1 deployment jboss ejb jndi classloader

我有几个单独的应用程序项目(EAR),包含多个EJB,我想将它们部署到同一个JBoss服务器上.现在,一些项目可能具有相同的EJB,但版本不同.在类似的情况下,一些项目可能使用相同"普通"类的不同版本(即在VM中加载的类,没有JNDI查找).

使用OC4J,这似乎不是一个问题,但现在使用JBoss,我得到的印象是所有内容都存在于相同的"名称空间"(或类加载器)中.我在这个假设中是否正确?

基本上,我想做(或确保)的是两件事:

  • 从执行EJB的JNDI查找的客户端,我希望能够指示它所在的应用程序,以便返回正确的EJB版本.

  • 在EJB中,在实例化类时,我想确保该类是使用与EJB相同的应用程序(EAR)部署的类.

我想我读过你可以为EJB配置一些"隔离"属性,我猜错了可能会解决我的第二点吗?

ska*_*man 6

JBoss的默认行为是使用平面类加载器.这样可以减少占用空间,但正如您所发现的那样,它会使部署多个应用程序变得麻烦.

谢天谢地,修复很简单.在目录中的ear-deployer.xml文件中deploy,确保设置了以下参数:

<attribute name="Isolated">true</attribute>
Run Code Online (Sandbox Code Playgroud)

这将为每个部署的EAR提供自己的类加载器空间.它仍然可以从JBoss lib目录访问东西,但是部署的EAR彼此是不可见的.