我有一个 JavaEE6 应用程序,由 Web 内容和 EJB 组成,并且部署为仅 WAR(使用 EJB3.1)。该构建基于 Maven。我刚刚读到有关在 Java EE 6 中订购模块初始化的新可能性 here我的申请也需要它。此外,我希望可以选择在 XML 中定义一些 EJB 属性。
由于示例是作为 EAR 项目部署的,所以顺序在 application.xml 中定义。但是在 WAR 部署的项目中,没有 application.xml。现在我想知道我在哪里可以定义这些信息?或者是否可以在 WAR 部署的应用程序中以某种方式使用 application.xml?
编辑:
糟糕,我没有正确阅读模块顺序示例,一开始我以为这是关于我的应用程序中 EJB 的加载顺序。当然,我的 WAR-app 中只有一个模块,因此订购毫无意义。
好的,但正如我所说,一个大问题仍然存在(也更改了问题标题以反射(reflect)更改):ejb-jar.xml 怎么样?我能否以某种方式在 XML 中定义有关我的 EJB 的内容(因为它对某些设置很有用,以避免重新编译)?
最佳答案
简而言之,基于 WAR 的部署是不可能的。
Java EE 6 的模块初始化功能用于按特定顺序初始化应用程序的不同模块。当您拥有基于 WAR 的 EJB 应用程序时,您的 EJB 和 Web 应用程序就不再有单独的模块了。只有一个模块 - 基于 WAR 的部署中的 Web 应用程序模块。
因此,如果您必须实现与 Java EE 6 中提供的模块初始化顺序相同的功能,则必须执行以下任一操作:
- 将 EJB 分离到一个单独的模块中,并使用基于 EAR 的部署。
- 这或多或少是一种诡计,就像在 Java EE 5 中所做的那样,您会希望避免它。您可能希望编写逻辑代码以确保在代码中使用单例 EJB 之前(假设这是由于在您的应用程序中使用了单例)。
ejb-jar.xml 在 WAR 文件中的位置
The EJB 3.1 specification (在打包一章中)解决了在 WAR 中部署时 ejb-jar.xml 文件的位置问题:
In a .war file, the deployment descriptor is stored with the name WEB-INF/ejb-jar.xml.
PS:我还没有尝试过这种部署方式。 YMMV.
关于java - EJB 3.1 应用程序部署为 WAR-only : What about ejb-jar. xml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3336727/