将.jar文件放在爆炸的EJB模块中的位置

时间:2013-09-04 16:44:40

标签: java-ee ejb weblogic11g

我正在部署一个JMS模块以与servlet应用程序一起工作。在我编写(并测试和重写)模块时,模块不存储在JAR文件中;它位于一个展开的目录中,作为Eclipse项目目录加倍。 (在生产环境中,它将放在一个罐子里。)

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

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

感谢。

3 个答案:

答案 0 :(得分:2)

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

Class-Path: lib/log4j.jar

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

答案 1 :(得分:0)

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

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

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

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

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

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

答案 2 :(得分:0)

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

Package section of Oracle docs