1

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

我想这个问题的第一部分是,Sun One Application Server v9.1 是否将 EJB 彼此隔离?我的印象是确实如此。但似乎另一个应用程序加载了 dep-vB.jar 并且这个 EJB 直接使用它而不加载它自己的。

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

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

谢谢。

4

2 回答 2

1

我想这个问题的第一部分是,Sun One Application Server v9.1 是否将 EJB 彼此隔离?我的印象是确实如此。但似乎另一个应用程序加载了 dep-vB.jar 并且这个 EJB 直接使用它而不加载它自己的。

根据Sahoo(GlassFish 开发人员)的说法,Java EE 规范不要求在单个耳朵的模块之间进行类加载隔离,因此行为可能因一个应用服务器而异。对于 Sun ONE,我对文档的理解是 EJB-JAR 是孤立的。

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

这是父母优先的策略(据我所知,Sun ONE 只允许更改webapps的委托模式)。

话虽如此,如果您在EJB-JARdep-vA.jarClass-Path条目中列出会发生什么?MANIFEST.MF

也可以看看

于 2010-06-23T00:40:32.190 回答
0

我没有使用过那个特定的服务器,但我知道在 WebSphere 中,有一个使用 PARENT_FIRST 或 PARENT_LAST 类加载的选项。您将寻找 PARENT_LAST 的等价物,其中类首先从 EAR 加载,然后再上传到服务器。

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

于 2010-06-22T21:26:12.340 回答