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

Ing*_*her 8 java java-ee java-ee-6 ejb-3.1

我有一个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的东西(因为它对某些设置有用,以避免重新编译)?

Vin*_*lds 9

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

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

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

  • 将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:我还没有尝试过这种部署方式.因人而异.

  • 作为旁注,您可以将EJB打包在EJB-JAR中并将它们部署在WAR中. (3认同)

Dav*_*ins 5

关于.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考虑还为时不晚.

我的投票仍然允许个别罐子拥有META-INF/ejb-jar.xml文件,就像这些罐子现在可以有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.对用户来说是一种痛苦.