java - EJB 3.1 应用程序部署为 WAR-only : What about ejb-jar. xml?

标签 java jakarta-ee java-ee-6 ejb-3.1

我有一个 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/

相关文章:

java - 如何在java中录制声音时减少噪音?

java - 如何在java中使用注释相关参数检查自定义运行时异常属性

java - java中的单例模式。惰性初始化

java - 如何截断一定长度的字符串但截断后包含完整的单词

jakarta-ee - 为什么我会得到两个 Singleton EJB 实例?

Java EE6 优于 EE5?

java - 如何在 JavaEE 6 中捕获 OptimisticLockException?

java - Android DBFlow 一对多完整示例

java - 即使使用 servlet 也无法访问 web-inf 文件夹中的 jsp 页面

java - 如何在 JPA <= 2.0 中模拟属性转换器?