0

我正在部署一个 JMS 模块以与 servlet 应用程序一起工作。在我编写(以及测试和重写)我的模块时,该模块没有存储在 JAR 文件中;它位于一个扩展目录中,是一个 Eclipse 项目目录。(在生产环境中,它会在一个 jar 中。)

我的 JMS 模块使用 log4j 进行日志记录。我的问题是:我将 log4j.jar 文件放在哪里以便我的 EJB 可以找到它?我尝试了各种位置,包括名为 lib/ 的目录,但似乎没有任何效果。(我可以告诉 Eclipse 在六个地方中的任何一个地方找到它。)我最终将它放在服务器域 lib 目录 (domains/my_domain/lib) 中,该目录适用于我的 JMS 模块,但搞砸了我的 servlet 模块访问数据源 - 我不断收到 NotSerializableException。

如果有什么不同,我使用 Eclipse (Juno) 进行开发,使用 Weblogic 10.3.5 运行和测试。

谢谢。

4

3 回答 3

2

事实上,你的罐子是否爆炸并没有太大的区别。主要的是您需要类路径上的库。您需要在清单文件中指定 jar 位置:

Class-Path: lib/log4j.jar

您可以使用此Oracle 文档作为参考。

于 2013-09-04T17:27:55.910 回答
0

我的工作解决方案(适用于 Weblogic,但可能不可移植)是%DOMAIN_HOME%\startWebLogic.cmd在域根目录中的脚本中添加一行:

set PRE_CLASSPATH=C:\${path}\log4j.jar

where${path}指向外部目录(在我的主目录中)。这似乎可以在不破坏其他任何东西的情况下工作。我确实尝试将 JAR 放在$DOMAIN_DIR/lib目录中,但这破坏了我在同一台服务器上运行的主 servlet 应用程序;由于某种原因,数据源突然无法正确反序列化。

我一直希望有一个半标准的地方来放置 JAR,就像在WEB-INF/libservlet 的目录中一样,这就是我真正想要的答案。但似乎这样的地方并不存在。

编辑: 再次查看此答案后(再次遇到同样的问题),这是更好的答案。Class-Path:文件中的MANIFEST.MF相对于分解后的 jar 的根目录。所以:

  1. 如果与 JAR 的根目录log4j.jar在同一目录中(而不是JAR 的根目录中),您将使用.Class-Path: log4j.jar
  2. 如果log4j.jar在 JAR 的根目录中(例如作为 的同级META-INF),您将使用(如果您的 JAR 在目录中)JarRootClass-Path: JarRoot/log4j.jar
  3. 我尝试使用绝对路径,例如C:/home/Menachem/work/libs/log4j.jar,但它不起作用。一旦我(最终)正确制定了规则#1和#2,我就没有再尝试使用反斜杠了。

我希望这对我以外的其他人有用...

于 2013-09-10T15:02:52.223 回答
0

请注意, Oracle 建议您将 EJB 打包为企业应用程序的一部分。

Oracle 文档的包部分

于 2021-03-04T07:47:14.280 回答