部署为WAR-only的EJB 3.1应用程序:ejb-jar.xml怎么样?

我有一个JavaEE6应用程序,由Web东西和EJB组成,并且部署为仅使用WAR(使用EJB3.1)。 构建基于Maven。 我刚刚读到了在Java EE 6中订购模块初始化的新可能性,这也是我的应用程序所需要的。 此外,我想有一个选项来定义XML中的一些EJB属性。

由于该示例部署为EAR项目,因此订单在application.xml中定义。 但是在WAR部署的项目中,没有application.xml。 现在我想知道我在哪里可以定义这样的信息? 或者是否可以在WAR-deployed-app中以某种方式使用application.xml?

编辑:

哎呀我没有正确阅读模块顺序示例,在第一时间我认为它是关于我的应用程序中的EJB加载的顺序。 当然我的WAR-app中只有一个模块,所以排序没有意义。

好的,但正如我所说,一个大问题仍然存在(也改变了问题标题以反映变化):ejb-jar.xml怎么样? 我可以用XML以某种方式定义关于我的EJB的东西(因为它对某些设置有用,以避免重新编译)?

简而言之,基于WAR的部署是不可能的。

Java EE 6的模块初始化function用于按特定顺序初始化应用程序的不同模块。 拥有基于WAR的EJB应用程序的那一刻,您不再拥有EJB和Web应用程序的单独模块。 只有一个模块 – 基于WAR的部署中的Web应用程序模块

因此,如果必须实现与Java EE 6中提供的模块初始化顺序相同的function,则必须执行以下任一操作:

  • 将EJB分离到单独的模块中,并使用基于EAR的部署。
  • 这或多或少都是骗局,就像在Java EE 5中所做的那样,你会希望避免它。 您可能希望在逻辑中进行编码以确保在代码中使用单个EJB之前(假设这是由于在您的应用程序中使用单例)而创建单独的EJB。

ejb-jar.xml在WAR文件中的位置

EJB 3.1规范 (在“打包”一章中)解决了部署在WAR中时ejb-jar.xml文件的位置问题:

在.war文件中,部署描述符以名称WEB-INF / ejb-jar.xml存储。

PS:我还没有尝试过这种部署方式。 因人而异。

关于.wars和ejb-jar.xml处理中的EJB的附注。 如前所述,该位置是WEB-INF / ejb-jar.xml,但是请注意,即使WEB-INF / lib /中有ejbs jar,它也是唯一检查的位置 – 通过标准规则任何META-INF / ejb- jar.xml文件有被忽略。

专家组对此进行了相当分散,因此如果您有偏好,则将反馈发送到EJB 3.1专家组列表以供EJB.next考虑也为时不晚。

我的投票仍然允许个别jar子拥有META-INF / ejb-jar.xml文件,就像这些jar子现在可以有persistence.xmls,beans.xmls,web片段等一样。对我来说更大的问题是它有点不一致使用嵌入式EJB容器API,它支持EAR样式的类路径,允许多个jar /模块,每个jar /模块可能包含一个META-INF / ejb-jar.xml文件。 结果是,如果您使用嵌入式API测试组成单个.war文件的多jar ejb应用程序,那么您将面临将所有ejb-jar.xml数据合并到单个ejb中的任务。 -appar用于webapp。 对用户来说是一种痛苦。