向版主致敬,并请教EJB的Classpath问题

做 J2EE 项目的时间不长,有个疑问,搜索良久未得答案。

我知道,WAR 里面用到的 .jar 文件应该放到 WEB-INF/lib 里(比如 Log4j ),这样可以避免 WAR 对系统 classpath 进行配置的需要,而且,还可以在 Runtime 进行 Load 和 UnLoad 动作。

但是我不知道 EAR 用到的 .jar 应该放到哪里才合适,有与 war 相对应的概念吗?

放到 EAR 的根目录?(没配置成功,需要配置 module/ java/ ?)
放到 EJB.jar 的根目录?(似乎并不管用?)
放到 classpath 中?(管用,但是,每次要配置,不嫌麻烦吗?)
放到 jre/lib/ext 中?(应该也管用,但是,也需要额外的配置,难道没有更好的方法吗?)

各位高手,还望指教。

看起来你是刚接触不久,你需要的是一份 EJB Specification.
看看里面对 EAR 文件的描述。EAR 文件有特殊格式要求的。
等你接解多了,就会发现,zip 文件里往往因为 META-INF
里的配置不同,就会产生不同的应用.

谢谢指教。

我查到一个方案是建议使用 manifest.mf 中的 class-path 属性,讲得不甚明白。

你的方案,具体来说是放 .jar 文件到什么位置呢?我比较笨,请你明确说明,谢谢。

把需要的jar 文件与 EJB jar 放在同一个 EAR 文件中,
在 EJB jar 的 manifest.mf 中要指定:


--------------------------------------------
Manifest-Version: 1.0
Class-Path: reference1.jar reference2.jar
--------------------------------------------

结构如下 :

EJBPkg.ear
|- reference1.jar
|- reference2.jar
|- YourEJB.jar
| |- META-INF
| |-MAINFEST.MF -- 这个文件应该含有上面的信息
|- META-INF
|- MAINFEST.MF
|- application.xml

说得非常清楚。

谢谢指教。。。