Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Sun Application Server中的EJB依赖项版本冲突_Java_Jakarta Ee_Ejb_Sunone - Fatal编程技术网

Java Sun Application Server中的EJB依赖项版本冲突

Java Sun Application Server中的EJB依赖项版本冲突,java,jakarta-ee,ejb,sunone,Java,Jakarta Ee,Ejb,Sunone,总结一下我遇到的问题,我有一个EJB,它使用库的版本A(我们称之为dep-vA.jar)。dep-vA.jar打包在EJB jar文件的根目录中。应用服务器中的域库文件夹包含相同库的版本B(我们称之为dep vB.jar)。调用EJB时,由于加载的是dep-vB.jar文件,而不是dep-vA.jar文件,因此出现了一个错误 我猜这个问题的第一部分是,Sun One应用服务器v9.1是否将EJB彼此隔离?我的印象是这样的。但它看起来像是另一个加载了dep-vB.jar的应用程序,这个EJB直接使

总结一下我遇到的问题,我有一个EJB,它使用库的版本A(我们称之为dep-vA.jar)。dep-vA.jar打包在EJB jar文件的根目录中。应用服务器中的域库文件夹包含相同库的版本B(我们称之为dep vB.jar)。调用EJB时,由于加载的是dep-vB.jar文件,而不是dep-vA.jar文件,因此出现了一个错误

我猜这个问题的第一部分是,Sun One应用服务器v9.1是否将EJB彼此隔离?我的印象是这样的。但它看起来像是另一个加载了dep-vB.jar的应用程序,这个EJB直接使用它,而不加载自己的应用程序

第二个问题是,如果应用服务器确实隔离了EJB,那么它是否会在查看应用服务器的lib文件夹之前从EJB的jar文件加载依赖项?我的印象是这也是真的,但也许不是

是否有人对Sun应用服务器足够熟悉,可以解释为什么要加载dep-vB.jar而不是dep-vA.jar?有没有办法让它加载dep-vA.jar而不更改应用服务器的lib文件夹中的内容?(我不愿意做任何可能影响服务器上其他应用程序的事情)


谢谢。

我没有使用那个特定的服务器,但我知道在WebSphere中,有一个选项可以使用PARENT\u FIRST或PARENT\u LAST类加载。您将寻找一个类似于PARENT_LAST的类,其中类在进入服务器之前首先从EAR加载


我假设这样的配置在任何应用服务器中都是可能的,因为您应该始终能够强制将特定于应用程序的JAR加载到任何其他服务器上。

我没有使用过特定的服务器,但我知道在WebSphere中,有一个选项可以使用PARENT\u FIRST或PARENT\u LAST类加载。您将寻找一个类似于PARENT_LAST的类,其中类在进入服务器之前首先从EAR加载

我假设这样的配置在任何应用服务器上都是可能的,因为您应该始终能够强制将特定于应用程序的jar加载到任何其他jar上

我猜这个问题的第一部分是,Sun One应用服务器v9.1是否将EJB彼此隔离?我的印象是这样的。但它看起来像是另一个加载了dep-vB.jar的应用程序,这个EJB直接使用它,而不加载自己的应用程序

根据(GlassFish开发人员)的说法,JavaEE规范并不要求在单个ear的模块之间进行类加载隔离,因此不同的应用服务器的行为可能不同。对于Sun ONE,我的理解是EJB JAR是隔离的

第二个问题是,如果应用服务器确实隔离了EJB,那么它是否会在查看应用服务器的lib文件夹之前从EJB的jar文件加载依赖项?我的印象是这也是真的,但也许不是

这是一种家长优先的策略(据我所知,Sun ONE只允许更改Web应用程序的授权模式

也就是说,如果您在EJB-jar的
MANIFEST.MF
条目的
Class路径中列出
dep-vA.jar
,会发生什么

另见
  • Sun Java System应用程序服务器平台第9版开发人员指南
我猜这个问题的第一部分是,Sun One应用服务器v9.1是否将EJB彼此隔离?我的印象是这样的。但它看起来像是另一个加载了dep-vB.jar的应用程序,这个EJB直接使用它,而不加载自己的应用程序

根据(GlassFish开发人员)的说法,JavaEE规范并不要求在单个ear的模块之间进行类加载隔离,因此不同的应用服务器的行为可能不同。对于Sun ONE,我的理解是EJB JAR是隔离的

第二个问题是,如果应用服务器确实隔离了EJB,那么它是否会在查看应用服务器的lib文件夹之前从EJB的jar文件加载依赖项?我的印象是这也是真的,但也许不是

这是一种家长优先的策略(据我所知,Sun ONE只允许更改Web应用程序的授权模式

也就是说,如果您在EJB-jar的
MANIFEST.MF
条目的
Class路径中列出
dep-vA.jar
,会发生什么

另见
  • Sun Java System应用程序服务器平台第9版开发人员指南

在JBoss中,EAR和WAR上有类似的类加载控件。我在web应用程序中看到过这个选项,但我找不到EJB的等效控件。至少在WebSphere中,EJB组件没有自己的类加载程序(WAR没有,在您的情况下它并不重要)。它使用EAR类加载器,以便在该级别上存在设置。在JBoss中,EAR和WAR上有类似的类加载控件。我在web应用程序中看到过此选项,但我找不到EJB的等效类加载器。至少在WebSphere中,EJB组件没有自己的类加载器(WAR没有,在您的情况下这并不重要)。它使用EAR类加载器,因此设置将存在于该级别。谢谢!重新阅读文档(更仔细),我想这正是Sun文档所说的。尽管我认为EJB类加载器是否委托给父级以及是否可以更改这一点有点模棱两可。明天我将尝试manifest类路径的想法。但是我应该提到,如果我确实从域库文件夹中删除了dep-vB.jar,那么应用程序服务器会正确地查找并加载dep-vA.jar。您的意思是在清单中添加“Class Path:dep-vA.jar”吗?我试过了,但没什么不同。@jthg:是的,这就是我的意思。老实说,我不确定这是否改变了什么(因为