<翻译>1.4.2. Deploy EAR with EJB3 JAR

原文地址:http://docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/ch01s04s02.html

 

大多数JavaEE应用是发布成EAR归档文件的。一个EAR归档文件是一个JAR文件,其典型表现是包含了一个WAR归档文件(处理web页面,servlet以及web相关的组件)以及一个或多个提供EJB3服务(如数据访问与事务)的JAR文件,和另外一些支持应用正常运行的JAR文件。另外一个EAR文件也拥有部署描述文件例如applocation.xml和jboss-app.xml。下面是一个典型EAR应用的基础结构

 

myapp.ear
|+ META-INF
   |+ applications.xml and jboss-app.xml
|+ myapp.war
   |+ web pages and JSP /JSF pages
   |+ WEB-INF
      |+ web.xml, jboss-web.xml, faces-config.xml etc.
      |+ lib
         |+ tag library JARs
      |+ classes
         |+ servlets and other classes used by web pages
|+ myapp.jar
   |+ EJB3 bean classes
   |+ META-INF
      |+ ejb-jar.xml and persistence.xml
|+ lib
   |+ Library JARs for the EAR

 

需要注意一点的是,不像许多其它的应用服务器,在JBossAS应用服务器中,你不需要为了让WAR文件能访问EJB3服务而在web.xml文件中声明EJB引用。你可以直接通过JNDI来获得引用。

 

下面是一个典型的application.xml文件。它声明了在EAR中的WAR与EJB3的JAR文件,以及为应用定义了web内容的根目录。当然,你可以在同一个EAR应用存放多个EJB3模块。在这个EAR应用中,application.xml文件也可以为这些jar文件选择性地定义一个共用的类路径。在JBossAS中,这个JAR文件路径默认为"lib",但这个路径在其它应用服务器中可能会不同

 

 

<application>
  <display-name>My Application</display-name>

  <module>
    <web>
      <web-uri>myapp.war</web-uri>
      <context-root>/myapp</context-root>
    </web>
  </module>

  <module>
    <ejb>myapp.jar</ejb>
  </module>
  
  <library-directory>lib</library-directory>

</application>
 

而jboss-app.xml文件则为EAR应用提供了特属于JBoss的部署配置方法。例如,它可以在EAR中指定模块的部署顺序、部署特属于JBoss的应用模块如SAR文档(Service ARchive for MBeans)和HAR文档(Hibernate ARchive for Hibernate objects)、提供可用于该应用的安全域和JMX MBean等等。你可以参考以下DTD来获取jboss-app.xml的更多属性:

http://www.jboss.org/j2ee/dtd/jboss-app_4_2.dtd.

 

一个jboss-app.xml的公用例子是配置关于该EAR文件是否要部署在它特有范围的类加载器中,用以防止和其它应用的命名冲突。如果你的EAR应用是部署在自己拥有的类加载器并且在其EJB3的JAR文件中只有一个persistence-unit,那你就可以使用@PersistenceContext EntityManager来注入EntityManager到session beans,而无需考虑得传递persistence unit的名称给@PersistenceContext注释。下面的jboss-app.xml为EAR应用标识了一个一定范围的类加载器 myapp:archive=myapp.ear 


<jboss-app>
      <loader-repository>
      myapp:archive=myapp.ear
      </loader-repository>
</jboss-app>
  

EAR部署由JBOSS_DIST/server/default/deploy/ear-deploy.xml文件来配置,此文件包含以下三个属性

 

<server>
   <mbean code="org.jboss.deployment.EARDeployer"
          name="jboss.j2ee:service=EARDeployer">
      <!-- 
          A flag indicating if ear deployments should 
           have their own scoped class loader to isolate 
           their classes from other deployments.
      -->
      <attribute name="Isolated">false</attribute>
      
      <!-- 
          A flag indicating if the ear components should 
          have in VM call optimization disabled.
      -->
      <attribute name="CallByValue">false</attribute>
      
      <!-- 
          A flag the enables the default behavior of 
          the ee5 library-directory. If true, the lib 
          contents of an ear are assumed to be the default 
          value for library-directory in the absence of 
          an explicit library-directory. If false, there 
          must be an explicit library-directory.
      -->
      <attribute name="EnablelibDirectoryByDefault">true</attribute>
   </mbean>
</server>

 

如果你设置了Isolated为true,所有的EAR部署默认都会拥有范围内的类加载器。因此不需要去定义jboss-app.xml文件中的classloader了。CallByValue 指明我们是否要把所有EJB调用都当成远程调用。远程调用比本地 call-by-reference调用要花费另外的花销,因为参与远程调用的对象需要序列化和反序列化。对于我们大多数的应用来说,WAR与EJB3的JAR是部署在同一个服务器上的,因此该值因该默认为false,并让服务器在同一个JVM中使用本地 call-by-reference调用来援用EJB方法。 EnablelibDirectoryByDefault属性指明在EAR归档文件中的lib目录是否要成为共享JAR文件的路径。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值