相关文章推荐
深情的围巾  ·  groovy ...·  1 周前    · 
有爱心的香槟  ·  android studio ...·  4 天前    · 
悲伤的沙滩裤  ·  jQuery之trigger()/trigg ...·  3 月前    · 
乐观的甘蔗  ·  导入Swagger ...·  1 年前    · 

在启动安装在应用程序服务器上的应用程序之前,应用程序中定义的所有 Enterprise JavaBeans (EJB) 引用和资源引用都必须与应用程序服务器中定义的实际工件 (企业 Bean 或资源) 绑定。

从 V8.0 开始,已扩展 EJB 容器中的绑定支持。 EJB 容器根据应用程序名称、模块名称和组件名称指定 EJB 3.x 业务接口的缺省 JNDI 绑定。 您不必为 EJB 3.x 模块中的每个接口或 EJB Home 接口或者 EJB 3.1 模块中的非接口视图显式定义 JNDI 绑定名称。

定义绑定时,为应用程序中的可引用工件和引用工件指定 Java™ 命名和目录接口 (JNDI) 名称。 对工件指定的 jndiName 值必须是限定的查询名。

不需要手动为 EJB 3.x 模块中企业 Bean 上的各个接口、EJB Home 接口或非接口视图指定 JNDI 绑定名称。 如果未显式指定绑定,那么 EJB 容器会指定缺省绑定。

缺省 EJB JNDI 绑定的名称空间

应用程序服务器可能会将缺省 EJB 绑定放入传统名称空间和 java:[scope] 名称空间集合。

传统名称空间集合包含 ejblocal: 和 Global JNDI 名称空间。 经典名称空间包含 WebSphere® 扩展,它们存在于 V8.0 之前的应用程序服务器中。

java:[scope] 名称空间集包含 java:global、java:app 和 java:module 名称空间。 java: [scope] 名称空间由 Java EE 6 规范定义,并在 V 8 中引入到 WebSphere Application Server 中。 它们不是传统名称空间的取代品, 相反,它们是传统名称空间以外的增加项。

传统名称空间详细信息

对于 EJB 3.x 级别,产品根据 EJB 接口是本地接口还是远程接口,为 EJB 接口提供了两个不同的传统名称空间。 此配置适用于 EJB Home 接口和非接口视图,这些视图可以视为特殊类型的接口。 存在下列传统名称空间:
  • Java 虚拟机 (JVM) 作用域, ejblocal: 名称空间
  • 全局 JNDI 名称空间
  • 必须将本地 EJB 接口、Home 接口和非接口视图绑定至 JVM 作用域的传统 ejblocal: 名称空间;只能从同一应用程序服务器进程中访问这些接口和视图。

    相反,必须始终将远程 EJB 接口和 Home 接口绑定到具有全局作用域的经典 WebSphere JNDI 名称空间; 可以从任何位置访问这些接口和 Home 接口,包括其他服务器进程和其他远程客户机。 本地接口和非接口视图无法绑定至传统全局作用域的 JNDI 名称空间,而远程接口无法绑定至 JVM 作用域的传统 ejblocal: 名称空间。

    传统 ejblocal: 和传统全局作用域的 JNDI 名称空间相互独立且截然不同。 例如,在 ejblocal: AccountHome 上绑定的 EJB 本地接口或无接口视图与在传统全局作用域的名称空间中的 AccountHome 上绑定的远程接口不同。 此行为有助于区别本地和远程接口引用。 具有 JVM 作用域的本地名称空间还使应用程序能够从 JVM 服务器进程中的任何位置 (包括跨 Java Platform, Enterprise Edition (Java EE) 应用程序边界) 直接查找或引用本地 EJB 接口和无接口视图。

    EJB 3.x 容器中 EJB 业务接口的缺省传统 JNDI 绑定(基于应用程序名称、模块名称和组件名称)

    EJB 容器根据应用程序名称、模块名称和组件名称指定 EJB 3.x 业务接口的缺省传统 JNDI 绑定,因此必须了解这些名称是如何定义的。 这些名称均为一个字符串。

    Java EE 应用程序以称为企业应用程序归档 (EAR) 文件的标准化格式打包。 EAR 是一种类似于 .zip 或 .tar 文件格式的封装文件格式,因此可形象地认为 EAR 是一组被同时封装在单个物理文件中的逻辑目录和文件。 在每个 EAR 文件中都有一个或多个 Java EE 模块文件,其中可以包括:
    • EJB 模块, Java EE 应用程序客户机模块和实用程序类模块的 Java 应用程序归档 (JAR) 文件
    • Web 模块的 Web 应用程序归档 (WAR) 文件
    • 其他特定于技术的模块(例如资源应用程序归档 (RAR) 文件)以及其他类型的模块
    在每个模块文件中,通常是一个或多个 Java EE 组件。 Java EE 组件的示例包括企业 Bean , Servlet 和应用程序客户机主类。

    由于 Java EE 模块打包在 Java EE 应用程序归档中,而 Java EE 组件又打包在 Java EE 模块中,因此可以使用每个组件的 嵌套路径 根据其应用程序名称,模块名称和组件名称来唯一标识 Java EE 应用程序归档中的每个组件。

    在传统绑定中使用的应用程序名称

    应用程序的名称由以下各项(按优先级排序)定义:
    • 在将应用程序安装到产品中期间,对产品管理控制台指定的应用程序名称的值,或者对 wsadmin 命令行脚本编制工具提供的 appname 参数的值。
    • 应用程序的 META-INF/application.xml 部署描述符中 <display-name> 参数的值。
    • EAR 文件名,不包括 .ear 文件后缀。 例如,在此情况下,名为 CustomerServiceApp.ear 的应用程序 EAR 文件将具有应用程序名称 CustomerServiceApp
    • Java EE 6 规范提供常规格式的 EJB JNDI 查询名称:java:global[/ appName ]/ moduleName / beanName 。 查询名称的 appName 部分显示为可选,原因是它不适用于在独立模块中部署的 bean。 只有打包到 .ear 文件中的 bean 才会在 java:global 查询名称中包含 appName 部分。 用于确定 appName 的值的规则不同于先前对应用程序名称描述的规则。 前面显示的查询名称模板 java:global 中的 appName 值由下列各项(按优先级顺序)定义:
      • 应用程序的 application.xml 部署描述符中 <application-name> 参数的值。
      • EAR 文件名,不包括 .ear 文件后缀。 例如,名为 CustomerServiceApp.ear 的应用程序 EAR 文件具有应用程序名称 CustomerServiceApp 。 如果此应用程序是独立模块,那么 java:global 查询名称不包含应用程序部分。
      按照 Java EE 6 规范, appName 的值也是绑定在名称 java:app/AppName 下的字符串值。

      在传统绑定中使用的模块名称

      模块的名称定义为模块文件的统一资源标识 (URI),该 URI 相对于 EAR 文件根目录。 换句话说,模块名称是模块的相对于 EAR 文件根目录的文件名,该根目录包括任何嵌套了该模块文件的子目录。 即使在部署描述符中使用 module-name 元素显式指定了逻辑模块名,此命名约定仍然正确。

      在以下示例中, CustomerServiceApp 应用程序包含名称为 AccountProcessing.jar Utility/FinanceUtils.jar AppPresentation.war 的三个模块:
      CustomerServiceApp.ear:AccountProcessing.jar
      com/mycompany/AccountProcessingServiceBean.class AccountProcessingService.class
      Utility/FinanceUtils.jar META-INF/ejb-jar.xml
      com/mycompany/InterestCalculatorServiceBean.class InterestCalculatorService.class
      AppPresentation.war META-INF/web.xml  
      Java EE 6 规范提供常规格式的 EJB JNDI 查询名称:java:global[/ appName ]/ moduleName / beanName 。 查询名称的 appName 部分显示为可选,原因是它不适用于在独立模块中部署的 bean。 只有打包到 .ear 文件中的 Bean 才会在 java:global 查询名称中包含 appName 部分。 包括此模块名称的另一 JNDI 查询名称变体为 java:app/ moduleName / beanName moduleName 的值不是模块 URI。 java:global 和 java:app 查询名称模板中的 moduleName 值由以下各项定义(按优先级顺序):
      • 模块的 ejb-jar.xml web.xml 部署描述符中 <module-name> 参数的值。
      • 模块 URI,不包括其 .jar .war 后缀。 例如, URI 为 CustomerService.jar CustomerService.war 的模块具有模块名称 CustomerService
      按照 Java EE 6 规范, moduleName 的值也是绑定在名称 java:module/ moduleName 下的字符串值。 这也适用于客户机模块。 对于客户机模块, <module-name> 参数位于 application-client.xml 部署描述符文件中。

      在传统绑定中使用的 EJB 组件名称

      由以下值(按优先级排序)定义的 EJB 组件的名称:
      • ejb-jar.xml 部署描述符中与 Bean 相关联的 ejb-name 标记(如果存在)的值。
      • 与 Bean 关联的 @Stateless 或 @Stateful 注释中 name 参数的值 (如果存在)。
      • Bean 实现类的名称,不带任何包级别限定符。
      • EJB 业务接口、Home 接口和非接口视图的缺省传统绑定

        您不必为 EJB 3.x 模块中的每个接口或 EJB Home 接口或者 EJB 3.1 模块中的非接口视图显式定义 JNDI 绑定名称。 如果您未显式地指定绑定,那么产品的 EJB 容器将使用此处所述的规则来指定缺省传统绑定。 这与在支持 EJB 3.0 规范之前该产品中的 EJB 支持不同。

        EJB 容器为每个企业 Bean 上的每个接口(业务接口、远程 Home 接口或本地 Home 接口)或非接口视图执行两个缺省传统绑定。 这两个传统绑定在此处被称为接口或非接口的“ 短格式 ”绑定和“ 长格式 ”绑定的视图。 短绑定仅使用接口或无接口视图的包限定 Java 类名,而长绑定在包限定接口或无接口视图类名之前使用企业 bean 的组件标识作为额外限定符,在组件标识与接口或无接口视图类名之间使用散列或数字符号 (# 符号)。 可认为这两种格式之间的差别类似于 短格式 TCP/IP 主机名(只有机器名称)与 长格式 主机名(前面添加了域名的机器名称)之间的差别。

        例如,接口或非接口视图的短格式和长格式缺省传统绑定可能分别为 com.mycompany.AccountService 和 AccountApp/module1.jar/ServiceBean#com.mycompany.AccountService。

        缺省情况下,EJB 缺省传统绑定的组件标识是使用企业 Bean 的应用程序名称、模块名和组件名称构成,但您可以改为指定您所需要的任何字符串。 通过将您自己的字符串定义为组件标识,您可以建立命名约定,其中,企业 Bean 的长格式绑定共用一个公共的用户定义部分,而且还具有一个系统定义的部分(基于每个接口或非接口视图类的名称)。 它还允许您使缺省 EJB 绑定名称独立于在应用程序模块层次结构中对企业 Bean 进行打包的方式。 在本主题的 "EJB 业务接口, Home 接口和非接口视图的用户定义绑定" 部分中描述了覆盖企业 Bean 的缺省组件标识。

        如先前在有关传统 JVM 作用域的本地名称空间和传统全局作用域的 JNDI 名称空间的部分中所述,所有本地接口, Home 接口和非接口视图都必须绑定到传统 ejblocal: 名称空间 (只能在同一服务器进程 (JVM) 中访问) ,而远程接口和 Home 接口必须绑定到传统全局作用域的名称空间 (可从 WebSphere 产品单元中的任何位置访问)。 如您所愿,对于缺省绑定EJB 容器遵循这些规则。

        此外,远程接口的 long 缺省绑定遵循建议的 Java EE 最佳实践,因为它们分组在 ejb 上下文名称下。 缺省情况下,EJB 远程 Home 接口和业务接口都绑定至应用程序服务器命名上下文的根。 但是,应用程序服务器根上下文用于绑定的不仅仅是 EJB 接口,因此为了避免此上下文变得过于混乱,最好将与 EJB 相关的绑定分组到公共 ejb 子上下文中,而不是将它们直接放在服务器根上下文中。 这样做的原因类似于使用磁盘卷上的子目录,而不是将所有文件都放入根目录中。

        远程接口的 短格式 缺省绑定不会绑定至 ejb 上下文。 短格式缺省绑定位于服务器根上下文的根目录中。 即使最佳实践是将所有与 EJB 相关的绑定分组到 ejb 上下文,但需要考虑其他情况,其中包括下列情况:
        • 短格式缺省绑定提供了简单而直接的方法来访问 EJB 接口。 如果将这些绑定直接放在服务器根上下文中,并仅通过接口名称或前面添加了 ejblocal: 的接口名称来引用这些绑定,那么将有助于遵循简洁这一目标。
        • 同时,如果将长格式缺省绑定放入 ejb 上下文或者(如果是本地接口)放入 ejblocal: 上下文,那么这些绑定不会位于服务器根上下文中并减少了混乱,从而足够允许将短格式绑定放入根上下文中。
        • 它提供了与使用类似命名约定的其他 Java EE 应用程序服务器的某种程度的交叉兼容性。
        • 缺省传统绑定模式

          表中显示了各种类型的传统绑定的模式。 在这些模式中,以 <bracketed italics> 编写的字符串表示值。 例如, <package.qualified.interface> 可能是 com.mycompany。AccountService 和 <component-id> 可能是 AccountApp/module1.jar/ServiceBean。

          组件标识 缺省模式为 <application-name> / <module-jar-name> / <ejb-name> ,除非在 EJB 模块绑定文件中使用 component-id 属性覆盖此模式,如下一节所述,当多个企业 Bean 实现同一接口时,简短缺省绑定名称中的冲突。 当未被 EJB 模块绑定文件覆盖时, <module-jar-name> 变量是 EAR 中的物理模块文件的名称,包括扩展名,例如 .jar .ear .war ,如先前 模块名称 部分中所述,即使在部署描述符中指定了逻辑模块名称也是如此。

          多个企业 Bean 实现同一接口时短格式的缺省传统绑定名称中发生冲突

          当在应用程序服务器中运行的多个企业 Bean 实现给定的接口或无接口视图时,由于短名称可能引用实现此接口或无接口视图的任何 Enterprise JavaBeans ,因此短缺省经典绑定名称变得不明确。 要避免此情况,您必须为实现给定接口或无接口视图的每个 Enterprise JavaBeans 显式定义绑定 (如下一节中所述) ,或者通过定义 WebSphere 产品 JVM 定制属性 com.ibm.websphere.ejbcontainer.disableShortDefaultBindings 来禁用包含这些 Enterprise JavaBeans 的应用程序的简短缺省经典绑定。 有关定义 JVM 定制属性的更多信息,请参阅 "Java 虚拟机定制属性"。

          要使用此 JVM 定制属性,请将属性名称设置为 com.ibm.websphere.ejbcontainer.disableShortFormBinding ,并将属性值设置为 * (星号) 作为通配符值以禁用服务器中所有应用程序的短格式缺省经典绑定,或者设置为要禁用短缺省经典绑定的 Java EE 应用程序名称的冒号定界序列,例如 PayablesApp :InventoryApp :AccountServicesApp。

          对缺省传统绑定进行显式指定所产生的影响

          如果显式地对某一接口、Home 接口或非接口视图指定绑定定义,那么不会对该接口或非接口视图执行任何短格式或长格式缺省传统绑定。
          支持的配置: 这仅适用于为其分配显式绑定的特定接口或非接口视图。 该企业 Bean 上其他没有显式指定绑定的接口都将使用缺省传统绑定名称进行绑定。

          java:[scope] 名称空间

          java:global , java:app 和 java: module 名称空间由 Java EE 6 规范引入。 它们提供绑定和查询可在应用程序服务器之间移植的资源的机制。

          服务器始终会为每个 EJB 接口(包括非接口视图)创建缺省长格式绑定,并将它们放置在 java:global、java:app 和 java:module 名称空间中。 还会创建短格式绑定,并将它们放置在 java:global、java:app 和 java:module 名称空间中(如果 Bean 仅公开一个接口,包括非接口视图)。 仅会为会话 Bean 创建缺省绑定。 不会为实体 Bean 或消息驱动的 Bean 创建缺省绑定。

          长格式绑定和短格式绑定都包含应用程序名称、模块名称和 Bean 组件名称。 应用程序名称缺省为 .ear 文件的基本名称,不含扩展名。 可以使用 application.xml 文件中的 application-name 元素覆盖应用程序名称。 模块名称缺省为模块的路径名,移除扩展名,包含所有目录名称。 可使用 ejb-jar.xml 或 web.xml 文件中的 module-name 元素覆盖模块名称。 Bean 组件名称缺省为 Bean 类的非限定名称。 可使用 EJB 组件定义注释上的 name 属性或 ejb-jar.xml 文件中的 ejb-name 元素覆盖 Bean 组件名称。

          长格式绑定模式为 java:global/ <applicationName> / <moduleName> / <bean component name> ! <fully qualified interface name>

          短格式绑定模式为 java:global/ <applicationName> / <moduleName> / <bean component name>

          例如,Bean 组件 MyBeanComponent exposes 仅公开一个 com.foo.MyBeanComponentLocalInterface 接口,并且打包在 myApp.ear 文件的 myModule.jar 模块中。 因此,将在 java:[scope] 名称空间中创建以下绑定:
          • java:global/myApp/myModule/MyBeanComponent!com.foo.MyBeanComponentLocalInterface
          • java:global/myApp/myModule/MyBeanComponent
          • java:app/myModule/MyBeanComponent!com.foo.MyBeanComponentLocalInterface
          • java:app/myModule/MyBeanComponent
          • java:module/MyBeanComponent!com.foo.MyBeanComponentLocalInterface
          • java:module/MyBeanComponent
          • 可以使用以下任一种技巧从 java:[scope] 名称空间中获取 MyBeanComponent Bean:
            • 使用 @EJB 注释上的 lookup 属性;例如:
              @EJB(lookup="java:global/myApp/myModule/MyBeanComponent")
            • 使用 ejb-jar.xml 中的 lookup-name 元素;例如:
              <lookup-name>java:global/myApp/myModule/MyBeanComponent!com.ibm.MyBeanComponentLocalInterfaces</lookup-name>
            • 完成在 InitialContext 对象上的 lookup;例如:
              initialContext.lookup("java:global/myApp/myModule/MyBeanComponent!com.foo.MyBeanComponentLocalInterfaces")
            • 除了应用程序服务器创建的缺省绑定之外,还可在 java:global、java:app 和 java:module 名称空间中定义引用。 在 java:global、java:app 和 java:module 名称空间中定义的引用不会进入组件名称空间中。 在 java:global、java:app 或 java:module 名称空间中定义的引用必须从那些名称空间中查询或插入。 不能在组件名称空间中查找或插入这些引用。

              Bean 组件可以使用 java:module 名称空间来声明打包在相同模块中的组件可以使用的引用。 它可以使用 java:app 名称空间来声明打包在相同应用程序的不同模块中的组件可以使用的引用。 它可以使用 java:global 名称空间来声明打包在不同应用程序中的组件可以使用的引用。

              java:global、java:app 或 java:module 名称空间中名称完全相同的引用会互相冲突,就如组件名称空间中名称完全相同的引用会冲突一样。 作用域为某个应用程序的 java:app 名称空间的引用不会与作用域为另一应用程序的 java:app 名称空间的名称完全相同的引用冲突。 同样,作用域为某个模块的 java:module 名称空间的引用,不会与作用域为另一模块的 java:module 名称空间的名称完全相同的引用冲突。

              可以使用注释在 java:global 名称空间中声明的引用;例如:
              @EJB(name="java:global/env/myBean")
              可以在 ejb-jar.xml 文件中声明的引用;例如:
              <resource-ref>
                  <res-ref-name>java:global/env/myDataSource</res-ref-name>
              </resource-ref>         

              有关 java: [scope] 名称空间的其他文档,请参阅 Java EE 6 规范的第 5.2.2 节和 Enterprise JavaBeans 3.1 规范的第 4.4 节。

              EJB 业务接口、Home 接口和非接口视图的用户定义绑定

              如果要手动指定绑定位置,而不是使用产品缺省绑定,那么您可以使用 EJB 模块绑定文件将您自己的绑定位置指定给特定接口、Home 接口和非接口视图。 也可以使用此文件仅覆盖模块中一个或多个企业 Bean 上的缺省绑定的组件标识部分。 如果覆盖组件标识,那么可以在使用所有缺省绑定与完全指定每个接口或非接口视图的绑定名称之间提供一定的回旋余地。

              要为 EJB 3.x 模块指定用户定义的绑定信息,请将文件 ibm-ejb-jar-bnd.xml 放在 EJB Java 归档 (JAR) 文件的 META-INF 目录中。 此文件的后缀为 XML。 此外,为本地接口或无接口视图定义经典绑定时,必须使用字符串 ejblocal: 作为名称的前缀,以便将其绑定到 JVM 作用域为传统的 ejblocal: 名称空间。

              ibm-ejb-jar-bnd.xml 文件用于在该产品上运行的 EJB 3.0 及更高版本的模块,而 ibm-ejb-jar.bnd.xmi 文件用于版本低于 EJB 3.0 的模块以及 Web 模块。 由于下列原因, ibm-ejb-jar.bnd.xml 文件中的绑定文件格式与 XMI 文件格式不同:
              • XMI 文件格式中声明的绑定和扩展取决于是否存在相应的 ejb-jar.xml 部署描述符文件,该文件显式引用连接至该文件中的元素的唯一标识号。 对于 EJB 3.0 及更高版本的模块,此系统不再切实可行,在这些版本中,不再要求模块包含 ejb-jar.xml 部署描述符。
              • XMI 文件格式设计为仅用产品开发工具和系统管理功能进行机器编辑;实际上,它原先是产品的内部实现的一部分,并且文件结构从未在外部加以记录。 这使得开发者无法以受支持的方式手动编辑绑定文件,或者在 WebSphere 独立构建过程中创建这些文件。
              • 基于 XML 的绑定文件不是引用 ejb-jar.xml 部署描述符中已编码的标识号,而是通过 EJB 组件的 EJB 名称来引用该组件。 模块中的每个 EJB 组件都具有一个唯一的 EJB 名称,该名称为缺省名称或由开发者显式指定。 所以,此行为提供了一种找到目标绑定和扩展的明确方法。
              • 新的绑定文件都基于 XML;并提供了一个 XML 模式定义 (XSD) 文件以便在外部记录该结构。 许多常见 XML 文件编辑器都可以使用这些 .xsd 文件,以帮助执行语法验证和代码补全功能。 因此,开发者现在可独立于应用程序服务器基础结构生成并编辑绑定和扩展文件。
              • 下表列出了用来将绑定指定给 EJB 3.x 模块的 EJB 接口和 Home 接口以及 EJB 3.1 模块的非接口视图的 ibm-ejb-jar-bnd.xml 元素和属性。
          表 1. 缺省绑定模式 缺省绑定模式

          绑定文件示例 1

          以下示例是一个基本的 ibm-ejb-jar-bnd.xml 文件,它仅包含将绑定名称指定给 EJB 接口和非接口视图的元素和属性。 它将覆盖用于名为 S01 的企业 Bean 上的缺省绑定的组件标识,并对此模块中企业 Bean S02 S03 上的某些接口指定显式绑定。
          <?xml version="1.0" encoding="UTF-8?"> 
          <ejb-jar-bnd xmlns=http://websphere.ibm.com/xml/ns/javaee xmlns:xsi="
           http://www.w3.org/2001/XMLSchema-instance "xsi:schemaLocation"=
           http://websphere.ibm.com/xml/ns/javaee 
           http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd "version 1.0">
           <session name="S01" component-id="Department549/AccountProcessors"/>
           <session name="S02" simple-binding-name="ejb/session/S02"/> 
           <session name="S03"> 
            <interface class="com.ejbs.BankAccountService" binding-name="ejblocal:session/BAS"/>
           </session>  
          </ejb-jar-bnd>
          该绑定文件具有以下结果:
          • 对 ejb-name 为 S01 的会话 Bean 指定了用户定义的组件标识,此组件标识将覆盖该 Bean 上所有接口视图和非接口视图的缺省组件标识(应用程序名称/ejb-jar 模块名称/Bean 名称)。 此 bean 上的本地接口和无接口视图在 ejblocal:Department549/AccountProcessors#<package.qualified.interface.name> 处绑定,而远程接口在 ejb/Department549/AccountProcessors#<package.qualified.interface.name> 处绑定
          • 假定 ejb-name 为 S02 的会话 Bean 具有单个 EJB 3.x 业务接口或 EJB 3.1 非接口视图。 或者,它可以具有具有本地 Home 接口和/或远程 Home 接口的 EJB 3.0 之前的 组件 接口。 如果业务接口或组件接口的一个或多个 Home 接口是本地接口,那么将绑定至 ejblocal:ejb/session/S02,如果是远程接口,那么将绑定至 ejb/session/S02。

            如果 bean S02 具有多个业务接口或多个业务接口和 Home 接口,那么 simple-binding-name 就有歧义。 In that case, the container disambiguates the binding assignments by appending #< package.qualified.interface.name > to the simple binding name, ejb/session/S02, for each of the bean interfaces.

          • ejb-name 为 S03 的会话 Bean 上的 EJB 3.x 业务接口或 EJB 3.1 非接口视图 com.ejbs.BankAccountService 被绑定至 ejblocal:session/BAS。
          如果此 Bean 上存在其他业务接口、Home 接口和非接口视图,那么将对所有这些接口和视图指定缺省传统绑定。 在本示例中,由于为 ejblocal: 名称空间指定了 com.ejbs.BankAccountService 接口,因此假定该接口为本地接口;如果该接口不是本地接口,那么将发生错误。

          下一部分将扩展此示例,引入一些元素,用于解析在 XML 部署描述符中或通过注释来声明的各种引用和注入条目的目标。

          用于对引用和注入目标进行解析的用户定义绑定

          前一部分显示了一些对业务接口、Home 接口和非接口视图指定用户定义的绑定名称的示例。 此部分包括如何解析引用、注入伪指令和消息驱动的 Bean 目标的链接目标。

          表 2。 ibm-ejb-jar-bnd.xml 元素和属性 ibm-ejb-jar-bnd.xml 元素和属性
          元素或属性 用于标识企业 Bean 的 ejb-name 的属性,<session>、<message-driven>、<entity> 或其他元素将应用于该企业 Bean。 <session name="AccountServiceBean"/> name 值是在 ejb-jar.xml 部署描述符文件的 <ejb-name> 元素中声明的名称,或是 @Stateful、@Stateless、@Singleton 或 @MessageDriven 注释的 name 属性,或者缺省为使用 @Session 或 @MessageDriven 注释进行注释的 EJB 实现类的非限定类名(如果在 XML 部署描述符中未声明任何 <ejb-name> 值,并且未在注释上声明任何 name 参数)。 component-id 该属性覆盖企业 Bean 的缺省组件标识值。 此企业 Bean 的缺省长格式经典绑定使用指定的组件标识而不是 <app_name>/<module_jar_name>/<bean_name>
          <session name="AccountServiceBean" 
          component-id="Dept549/AccountProcessor"/>

          The previous example results in the bean whose ejb-name is AccountServiceBean, having its long-form default classic local interfaces bound at ejblocal:Department549/AccountProcessor#< package.qualified.interface > Its long-form default classic remote interfaces are bound at ejb/Department549/AccountProcessor#< package.qualified.interface >

          可单独使用,也可与 <interface> 元素、local-home-binding-name 属性或 remote-home-binding-name 属性一起使用。 未对其指定显式绑定的接口可能使用用户指定的组件标识值来执行缺省传统绑定。 对其指定了显式绑定的接口将使用那些值进行绑定。

          由于打算将 simple-binding-name 属性应用于给定企业 Bean 上的所有已定义接口(任何接口均不使用缺省值),因此将 component-id 与 simple-binding-name 一起应用通常没有用处。

        • 使用姊妹 EJB Home 接口来实现低于 EJB 3.0 类型的组件接口(本地和/或远程类型)。
        • 该属性的值用作企业 Bean 业务接口的绑定位置和/或 Enterprise JavaBeans 本地和/或远程 Home 接口的绑定位置。 绑定被放入传统 ejblocal: 名称空间中(如果接口或 Home 接口为本地),或者被放入传统全局作用域的 JNDI 名称空间的应用程序服务器根上下文中(如果接口或 Home 接口为远程)。
          <session name="AccountServiceBean"
          simple-binding-name="ejb/AccountService"/>
          此示例将生成一个 Bean,它的 ejb-name 是 AccountServiceBean,它的本地业务接口或 Home 接口(如果有)被绑定至传统本地 JVM 作用域的 EJB 名称空间中的 ejblocal:ejb/AccountService,其远程业务接口或 Home 接口(如果有)被绑定至传统全局作用域 JNDI 名称空间的应用程序服务器根上下文中的 ejb/AccountService。
          重要信息: 重要信息:
          在此特定示例中,将使用属性的确切值,包括 ejb 子上下文名称,即使该接口是绑定到 ejblocal: 名称空间的本地接口也是如此。 如果指定了用户定义的绑定,那么将使用该属性指定的准确名称。
          不能与 local-home-binding-name 属性、remote-home-binding-name 属性或 <interface> 元素一起使用。 另外,也不得在实现多个业务接口的 Bean 上使用;在这种情况下,请改为使用 <interface> 元素。

          如果在实现多个业务接口的企业 Bean 上使用此属性,或者将业务接口和本地/远程组件接口与 Home 接口一起使用,那么可通过如下方法来确保生成的绑定没有歧义:在属性值后面添加破折号或编号符号(# 符号),紧随其后是企业 Bean 上每个接口和/或 Home 接口的包限定类名。 然而,可使用 <interface> 元素为每个业务接口定义绑定而不是使用 simple-binding-name 来避免这种情况。

          重要信息: 重要信息:
          defining a simple-binding-name on a bean that implements more than one business interface is not the same as overriding the default component ID for a bean using <component-id>. Remote interface default bindings defined with a component-id are still grouped under the EJB context (as all remote interface default bindings are), while remote interface bindings disambiguated by the EJB container in response to erroneous use of simple-binding-name on a bean with multiple interfaces are not grouped under the ejb context.
          另外,对于长格式缺省传统绑定,始终包含包限定类名,而对于 simple-binding-name,仅在发生错误时为消除歧义的情况下才包含包限定类名。 请不要依赖于通过消除歧义创建的绑定名称,因为在更改 Bean 以实现更多或更少接口时,可能不会产生这样的效果。
          <interface> <session> 元素的子元素,用于将绑定指定给特定 EJB 业务接口或非接口视图。 与 simple-binding-name、local-home-binding-name 和 remote-home-binding-name 属性不同的是,binding-name 参数和类参数都是必需的(事实上,这种差别可解释需要单独的 XML 元素而不是某一属性的原因)。 该类参数指定要绑定的业务接口或非接口视图类的包限定名称。
          <interface class="com.ejbs.InventoryService" 
          binding-name="ejb/Inventory"/> 
          (声明为 <session> 元素中的一个子元素)
          不要将其与 simple-binding-name 属性一起使用。 由于本地接口和非接口视图必须始终绑定至传统 JVM 作用域的名称空间,因此将此元素应用于本地接口或非接口视图时,binding-name 值必须以 ejblocal: 前缀开头。
          <interface class="com.ejbs.InventoryService" 
          binding-name="ejb/Inventory"/>
          (声明为 <session> 元素中的一个子元素)
          必须与 <interface> 元素一起使用且仅在该元素上使用。 由于本地接口必须始终绑定至传统 JVM 作用域的名称空间,因此在被应用于本地接口时,binding-name 值必须以 ejblocal: 前缀开头。
          以下示例是示例 1 中引入的基本 ibm-ejb-jar-bnd.xml 文件的扩展。
          <?xml version="1.0" encoding="UTF-8"?> 
          <ejb-jar-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" "xmlns:xsi"=
          "http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee" 
          "http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd version" "1.0">
           <session name="S01" component-id="Department549/AccountProcessors"/>
           <session name="S02" simple-binding-name="ejb/session/S02"/>
           <session name="S03">
            <interface class="com.ejbs.BankAccountService"
             binding-name="ejblocal:session/BAS"/>
            <ejb-ref name="com.ejbs.BankAccountServiceBean/goodBye"
             binding-name="ejb/session/S02"/>
            <resource-ref name="com.ejbs.BankAccountServiceBean/dataSource"
             binding-name="jdbc/Default"/>
           </session>
           <message-driven name="MO1">
            <jca-adapter activation-spec-binding-name="jms/InternalProviderSpec"
             destination-binding-name=jms/"ServiceQueue"/>
           </message-driven>
           <session name="S04" simple-binding-name="ejb/session/S04">
            <resource-ref name="ejbs.S04Bean/dataSource"
             binding-name="jdbc/Default">
             <authentication-alias name="defaultlogin"/>
            </resource-ref>
           </session>
           <session name="S05">
            <interface class="com.ejbs.InventoryService"
             binding-name="ejb/session/S05Inventory"/>
            <resource-ref name="ejbs.S05Bean/dataSource"
             binding-name="jdbc/Default">
             <custom-login-configuration name="customLogin">
              <property name="loginParm1" value="ABC123"/>
              <property name="loginParm2" value="DEF456"/>
             </custom-login-configuration>
            </resource-ref>
           </session>
          </ejb-jar-bnd>
          此绑定具有以下结果:
          1. 名为 S01、S02 和 S03 的会话 Bean 的业务接口、Home 接口和非接口视图绑定与上一示例相同。
          2. 其 ejb-name 为 S03 的会话 Bean 现在包含两个引用目标解析绑定:
            • ejb-ref 绑定将在 java:comp/env/com.ejbs.BankAccountServiceBean/goodBye 处定义的 EJB 引用解析为应用程序服务器根 JNDI 上下文中的 JNDI 位置 ejb/session/S02。 EJB 引用还可以由类 com.ejbs.BankAccountServiceBean 中的 @EJB 注入定义到名为 goodBye 的实例变量中。
              注: ejb/session/S02 是会话 Bean 的 JNDI 位置 S02 也是在此绑定文件中定义的,这意味着引用指向名称为 S02 的会话 Bean。
            • resource-ref 绑定将在 java:comp/env/com.ejbs.BankAccountServiceBean/dataSource 处定义的资源引用解析为 JNDI 位置 jdbc/Default。 资源引用还可以由类 com.ejbs.BankAccountServiceBean 中的 @Resource 注入定义到名为 dataSource 的实例变量中。
            • 绑定是对其 ejb-name 为 M01 的消息驱动的 Bean 定义的。 MDB 使用 JCA 1.5 适配器从定义到名称为 jms/InternalProviderSpec 的 WebSphere Application Server 的 JCA 1.5 激活规范从定义到 WebSphere Application Server (其 JNDI 名称为 jms/ServiceQueue) 的 JMS 目标接收消息。
            • 假定 ejb-name 为 S04 的会话 Bean 具有单个业务接口或非接口视图,如果它是远程接口或视图,那么将绑定至 ejb/session/S04,如果它是本地接口或视图,那么将绑定至 ejblocal:ejb/session/S04。 它具有名为 java:comp/env/ejbs/S04Bean/dataSource 的 resource-ref。 这也可以是类 ejbs.S04Bean,带有到名为 dataSource 的变量的 @Resource 注入。 此资源引用将解析为 JNDI 位置 jdbc/Default。 resource-ref 引用 J2C 连接,并使用 WebSphere Application Server 中定义的名为 defaultlogin 的简单认证别名连接到此资源。
            • 为类名为 com.ejbs.InventoryService 的接口定义了业务接口绑定,该接口由 ejb-name 为 S05 的会话 Bean 实现; 假定该接口是远程接口,因为它没有以 ejblocal: 作为前缀,因此可能绑定在经典全局作用域名称空间中服务器的根 JNDI 上下文中的 ejb/session/S05Inventory 上。 将对由此 Bean 实现的任何其他业务接口指定缺省传统绑定。 该 Bean 具有名为 java:comp/env/ejbs.S05Bean/dataSource 的 resource-ref (或将类 ejbs.S05Bean 中的 @Resource 注入到名为 dataSource 的变量中) ,该资源将解析为 JNDI 位置 jdbc/Default。 resource-ref 引用 J2C 连接并且使用包含两个“名称/值”对的定制登录配置连接至此资源。
            • 绑定文件示例 3

              本节稍后的此示例演示如何定义和解析 EJB 引用绑定,以在同一 WebSphere Application Server 单元中的应用程序服务器实例之间执行 JNDI 查找。 它使用两个 EJB bean:一个被调用 bean 和一个调用 bean。被调用 bean 使用 simple-binding-name 属性来定义显式绑定属性,而调用 bean 执行 @EJB 注入并使用它的关联绑定文件中的 ejb-ref 元素来解析引用,以便它指向位于不同应用程序服务器进程中的被调用 bean。

              ibm-ejb-jar-bnd.xml (called bean)

              <?xml version="1.0" encoding="UTF-8"?> 
              <ejb-jar-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" 
               xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" 
               xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee" 
               "http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd" version="1.0"> 
               <session name="FacadeBean" simple-binding-name="ejb/session/FacadeBean"/> 
              </ejb-jar-bnd>
              This binding file content assumes that the session bean whose ejb-name is FacadeBean implements a single business interface, and thus the simple-binding-name attribute can be used as an alternative to the <interface> subelement. 在这种情况下,FacadeBean 将实现单个远程业务接口,该接口被绑定至应用程序服务器的服务器根 JNDI 上下文(FacadeBean 所在的位置)中的 ejb/session/FacadeBean。

              代码段(调用 Bean)

              @EJB(name="ejb/FacadeRemoteRef") 	
              FacadeRemote remoteRef; 	
              try {
                   output = remoteRef.orderStatus(input);
              catch (Exception e) {
                   // Handle exception, etc.
              } 
              此代码片段对名为 remoteRef 的实例变量 (类型为 FacadeRemote) 执行 EJB 资源注入。 注入将覆盖 name 参数,将生成的 ejb-ref 引用名称设置为 ejb/FacadeRemoteRef。 此代码将对所注入的引用调用业务方法。

          ibm-ejb-jar-bnd.xml(调用 Bean)

          <?xml version="1.0" encoding="UTF-8"?> 
          <ejb-jar-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" 
           "xmlns:xsi="
           "https://www.w3.org/2001/XMLSchema-instance" 
           xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee" 
           "http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd" version="1.0">
           <session name="CallingBean">     
            <ejb-ref name="ejb/FacadeRemoteRef" 
             binding-name="cell/nodes/S35NLA1/servers/S35serverA1/ejb/session/FacadeBean"/>   
           </session> 
          </ejb-bnd-jar>  
          最后,此绑定文件将 ejb-ref 名为 ejb/FacadeRemoteRef 的 EJB 引用解析为指向 cell/nodes/S35NLA1/servers/S35serverA1/ejb/session/FacadeBean 的传统全局作用域 JNDI 名称。 此全局作用域的经典 JNDI 名称表示在调用 Bean 的 WebSphere Application Server 单元中名为 S35NLA1 的节点上名为 S35serverA1 的服务器根上下文下的 ejb/session/FacadeBean 处绑定的接口。 要指向另一个 WebSphere Application Server 单元中的位置,可以使用 CORBAName 样式的名称来代替标准 JNDI 名称。

          可以在“用于更新应用程序文件的方法”主题中找到有关如何修改 ibm-ejb-jar-bnd.xml 文件的指示信息。

          注入和引用之间的关系

          在注入伪指令与引用声明之间存在一对一联系:每个注入均隐式地定义某一类型的引用,相反,每个引用均可以根据情况定义一个注入。 可将注入注释视为一种通过注释定义引用而不是在 XML 部署描述符中定义引用的机制。

          缺省情况下,注入使用某一名称来定义引用,该名称由执行注入的组件的包限定类名、正斜杠 (/) 以及要在其中注入的变量或属性的名称构成。 例如,在类 com.ejbs.AccountService 中执行的注入到名为 储户服务 的变量或属性中,将生成名为java:comp/env/com.ejbs.AccountService/储户服务的引用。 但是,在注入伪指令上指定可选的 name 参数将覆盖此缺省名称,并使引用根据 name 参数的值进行命名。

          如果知道此规则,那么就很容易弄清楚如何做到:使用绑定文件不但解析在 XML 部署描述符中声明的引用的目标,而且解析由注释注入伪指令隐式声明的引用的目标。 只需在注入注释上使用 name 参数的值,或者使用类名和变量/属性名中的缺省引用名称 (如果未指定 name 参数) ,就好像它是在 XML 部署描述符中声明的引用的名称一样。

          EJB 引用和 EJB 注入的缺省解析:EJB 链接和自动链接功能

          EJB 链接 自动链接 功能是两种不同的机制,用于解析对 EJB 组件的引用,这些组件打包在引用组件所在的应用程序和应用程序服务器进程中。 EJB 链接和自动链接都不需要显式解析具有绑定信息的 EJB 引用。 EJBLink 功能部件由 EJB 规范定义,而 AutoLink 功能部件是 WebSphere Application Server 扩展。

          EJB 链接和自动链接功能使用不同的搜索条件来查找目标 Bean 组件。 EJB 链接使用显式指定的 Bean 名称来搜索目标 Bean 组件。 自动链接使用 Bean 实现的接口来搜索目标 Bean 组件。 如果未提供显式绑定但提供了 Bean 名称,那么将使用 EJB 链接功能。 如果未提供显式绑定并且未提供 Bean 名称,那么将使用自动链接功能。 永远不会在同一搜索进程中将 EJB 链接和自动链接功能一起使用。

          除搜索条件以外,EJB 链接和自动链接功能是相似的。 这两个功能都会首先搜索特定模块,然后,如果有需要,将后退到搜索同一应用程序和应用程序服务器进程中的其他模块。 这两个功能都要求搜索条件精确地解析为一个 Bean 组件,当搜索条件解析为多个 Bean 组件时,将认为这是一个错误情况。 出现错误情况是因为应用程序服务器不知道必须使用多个 Bean 组件中的哪个组件。 在此情况下,将发生 com.ibm.websphere.ejbcontainer.AmbiguousEJBReferenceException 异常。 当引用组件尝试查找目标 Bean 组件时,在运行时会抛出此异常。

          EJB 链接功能支持三种不同的格式。
          • 仅指定 Bean 组件的名称。 例如,MyBean。
          • 指定包含目标 Bean 组件的物理模块文件的名称(包括扩展名),后面跟有 # 字符,然后是 Bean 组件的名称。 例如,myModule.jar#MyBean
          • 指定包含目标 Bean 组件的模块的逻辑名称,后面跟有斜杠字符 (/),然后是 Bean 组件的名称。 例如,MyModule/MyBean。
          • (可选)可以在 ejb-jar 模块的 EJB 部署描述符中使用 module-name 元素,或者可以在包含 EJB 内容的 WAR 模块的 Web 部署描述符文件中使用 module-name 元素,指定模块的逻辑名。 对于包含 EJB 内容的 WAR 模块,将忽略 EJB 部署描述符中指定的 module-name 元素,并且处理 Web 部署描述符中指定的 module-name 元素。 未在部署描述符中指定 module-name 值时,将对模块指定缺省逻辑名。 缺省逻辑模块名是模块文件的基本名称,没有扩展名。 例如,模块文件 MyModule.jar 具有缺省逻辑模块名称 MyModule。

            即使在模块具有逻辑名时,也仍然支持指定物理模块文件的名称。 即使在部署描述符中未配置逻辑模块名时,也仍然支持指定模块的逻辑名。 在这种情况下,模块的基本名称将用作模块的逻辑名。

            可嵌入 EJB 容器支持所有 EJBLink 格式。 为了支持物理模块文件格式,可嵌入 EJB 容器不允许您启动具有相同基本名称的多个模块。

            AutoLink 是 WebSphere Application Server 的增值功能,无需在某些使用方案中显式解析 EJB 引用目标。 在 WebSphere Application Server V8中, AutoLink 在每个 WebSphere Application Server 进程的边界内实现。 自动链接算法的工作原理如下。

            当产品中的 EJB 容器在给定的 EJB 模块中遇到 EJB 引用时,它首先检查您是否已通过在模块的绑定文件中包含某一条目来显式地解析该引用的目标。 如果在绑定文件中找不到目标的任何显式解析,那么该容器将在引用模块中搜索用于实现您在引用中定义的接口类型或非接口视图的企业 Bean。

            如果它在模块中找到 正好一个 实现该接口或非接口视图的企业 Bean,那么它将使用该企业 Bean 作为 EJB 引用的目标。 如果该容器在此模块中找不到该类型的企业 Bean,那么它会将搜索范围扩展至此模块所属的应用程序,然后在该应用程序中搜索与引用模块一样被指定给同一应用程序服务器的其他模块。 此外,如果容器在应用程序的其他模块(已指定给引用模块所在的服务器)中找到 正好一个 实现目标接口或非接口视图的企业 Bean,那么它将使用该企业 Bean 作为引用目标。

            自动链接的作用域限于 EJB 引用所在的应用程序及指定了引用模块的应用程序服务器。 必须使用 EJB 模块的 ibm-ejb-jar-bnd.xml 文件或 Web 模块的 ibm-web-bnd.xmi 文件中的引用目标绑定来显式解析对其他应用程序中的企业 Bean ,分配给其他应用程序服务器的模块中的企业 Bean 或已分配给 WebSphere Application Server 集群的模块中的企业 Bean 的引用。

            必须注意,虽然 EJB 容器、Web 容器和应用程序客户机容器支持自动链接,但仅 EJB 引用支持自动链接,其他类型的引用均不支持。 此外,由于 AutoLink 函数的作用域仅限于将引用模块分配到的服务器,或者对于 Java EE 客户机容器,仅限于将客户机容器配置为其 JNDI 引导服务器的服务器,因此它主要在开发环境和其他单服务器使用方案中很有用。 即使存在这些局限性,但由于无需显式解析 EJB 引用,所以它在开发过程中很有价值。

            EJB 以及资源引用和注入的解决方案:查询功能

            EJB 3.1 规范将查询功能定义为通过显式 JNDI 名称解析对 EJB 或资源的引用的机制。 可以对 javax.ejb.EJB 或 javax.annotation.Resource 注释指定 lookup 属性。 The corresponding XML attribute in the ejb-jar.xml file is <lookup-name> , on one of the following elements: <ejb-ref>, <ejb-local-ref>, <env-entry>, <resource-ref>, <resource-env-ref>, or <message-destination-ref>. lookup or <lookup-name> is a JNDI name relative to the java:comp/env naming context.

            On an EJB reference, lookup or <lookup-name> must not be specified with beanName or with <ejb-link>. The administrative console displays lookup-name and ejb-link as read-only. 但是,如果在标记为 "将 EJB 引用映射到 Bean" 的应用程序安装步骤中指定了 JNDI 名称,那么它将覆盖 lookup-name 或 ejb-link 值。

            覆盖应用程序中定义的环境条目

            应用程序可使用适合进行单元测试但不适合集成测试或生产用途的值来定义环境条目。 如果要覆盖环境条目值,那么可将以下元素添加至对应绑定文件:
            <env-entry name=name value=value/>
            其中 name 是在应用程序中定义 env-entry 时所使用的名称, value 是指定给以字符串格式表示的 env-entry 的值。 value 的字符串是根据环境条目的类型进行解析的,就好像使用 env-entry-value 在部署描述符中指定了该值一样。 例如,
            <env-entry name="java:module/env/taxYear" value="2010"/>
            将名为 java:module/env/taxYear 的 env-entry 与值 2010 相关联。
            或者,可将 env-entry 配置为可通过 JNDI 访问的另一对象的引用。 从 JNDI 查询返回的对象将用作 env-entry 值。 该选项的元素已具有以下格式:
            <env-entry name="name" binding-name="lookupName"/>
            其中 name 是在应用程序中定义 env-entry 时所使用的名称, lookupName 是应用于对缺省初始上下文执行的查找时解析的 JNDI 名称。 例如,
            <env-entry name="java:module/env/taxYear" binding-name="cell/persistent/MyApp/MyModule/taxYear"/>
            将名为 java:module/env/taxYear 的 env-entry 与从 cell/persistent/MyApp/MyModule/taxYear 上的缺省初始上下文查找操作返回的值相关联。 您将负责创建 JNDI 对象绑定。 绑定对象的类必须可指定给关联 env-entry 的对象类型。

            可在应用程序级别及 EJB、Web 和客户机模块中定义环境条目。 这些级别对应于绑定文件 application-bnd.xml ejb-jar-bnd.xml web-app-bnd.xml application-client-bnd.xml

            覆盖数据源定义

            借助 Java EE 6,可以开发使用 @DataSourceDefinition 注释或 <data-source> 部署描述符条目来定义数据源的应用程序。

            应用程序应查找资源引用而不是直接查找数据源定义。 如果要安装包含直接查找数据源定义操作的现有应用程序,并且希望此应用程序使用另一数据源定义,那么可使用解析至您创建的受管资源的绑定来覆盖此数据源定义。 通过将以下元素添加至绑定文件来创建绑定:
            <data-source name="name" binding-name="lookupName"/> 
            其中 name 是在应用程序中定义 env-entry 时所使用的名称, lookupName 是应用于对缺省初始上下文执行的查找时解析的 JNDI 名称。 例如,
            <data-source name="java:module/env/myDS" binding-name="jdbc/DB2DS"/>
            导致在 java:module/env/myDS 上查找以解析与名称 jdbc/DB2DS 绑定的数据源 (相对于缺省初始上下文)。 例如,可通过管理控制台创建绑定在 jdbc/DB2DS 下的数据源。

            可在应用程序级别及 EJB、Web 和客户机模块中定义数据源。 这些级别对应于绑定文件 application-bnd.xml ejb-jar-bnd.xml web-app-bnd.xml application-client-bnd.xml

            集群环境和跨服务器环境中的命名注意事项

            前面各个部分中的传统全局 JNDI 命名约定在非集群环境中以及在查询目标位于查询源所在的集群中时适用。 从集群外部对给定集群中的绑定执行查询时,必须根据以下约定对查询字符串进行限定以指示目标所在的集群的名称:
            cell/clusters/<cluster-name>/<name-binding-location>   
            例如,假定 EJB 接口绑定位置在应用程序服务器根上下文中:
            ejb/Department549/AccountProcessors/CheckingAccountReconciler  
            如果将实现此接口的 EJB 指定给隶属于名为 Cluster47 的集群的应用程序服务器,那么该集群外部的查询字符串如下所示:
            cell/clusters/Cluster47/ejb/Department549/AccountProcessors/CheckingAccountReconciler
            跨应用程序服务器进程执行查询时,必须根据以下约定对查询字符串进行限定以指示目标所在的节点和服务器的名称:
            cell/nodes/<node-name>/servers/<server-name>/<name binding location> 
            再次假定 EJB 接口绑定位置在应用程序服务器根上下文中:
            ejb/Department549/AccountProcessors/CheckingAccountReconciler 
            如果将实现此接口的企业 Bean 指定给位于节点 S47NLA1 上的应用程序服务器 Server47A1,那么跨服务器查询字符串如下所示:
            cell/nodes/S47NLA1/servers/Server47A1/ejb/Department549/AccountProcessors/CheckingAccountReconciler 

            用户定义的 EJB 扩展设置

            对于要为 WebSphere Application Server EJB 扩展设置指定值的情况,可以使用 EJB 模块扩展文件 将这些设置分配给该模块中的特定 EJB 类型。 根据定义的扩展的类型,通过将这些文件中的一个或两个放入 EJB JAR 文件的 META-INF 目录中,可以指定 EJB 3.x 模块的扩展设置信息。 这两个文件的名称为 ibm-ejb-jar-ext.xml ibm-ejb-jar-ext-pme.xml

            注: 这些文件上的后缀是 XML ,而不是先前版本的 WebSphere Application Server 中的 XMI。
            ibm-ejb-jar-ext.xml ibm-ejb-jar-ext-pme.xml 文件用于在 WebSphere Application Server 中运行的 EJB 3.x 模块,而 ibm-ejb-jar-ext.xmi ibm-ejb-jar-ext-pme.xmi 文件用于 pre-3.0 EJB 模块。 WebSphere Application Server V8.0 使用基于 XML 的新扩展文件格式,而不是先前的 .xmi 文件格式,原因如下:
            1. xmi 文件格式中声明的绑定和扩展取决于是否存在对应的 ejb-jar.xml 部署描述符文件,该文件显式地引用该文件中的元素所连接的唯一标识编号。 此系统对于 EJB 3.0 及更高版本的模块不再可行,在这些版本中,不再要求模块包含 ejb-jar.xml 部署描述符。
            2. xmi 文件格式设计为仅由 WebSphere 开发工具和系统管理功能进行机器编辑; 它实际上是 WebSphere内部实现的一部分,并且从未在外部记录该文件的结构。 这使得开发者无法以受支持的方式手动创建或编辑绑定或扩展文件,或者在 WebSphere 独立构建过程中创建这些文件。
            3. 基于 XML 的扩展文件格式不是引用 ejb-jar.xml 中已编码的标识号,而是通过其 EJB 名称来引用 EJB 组件。 模块中的每个 EJB 组件保证具有唯一的 EJB 名称(缺省值或由开发者显式指定的值),因此这提供了一种明确的方法来定位绑定和扩展。
            4. 新的绑定和扩展文件格式基于 XML,并提供了 XML 模式定义 (xsd) 文件以便在外部记录它们的结构。 这些 .xsd 文件可供许多公共 XML 文件编辑器使用以帮助执行语法验证和代码补全功能。 因此,开发者现在可以使用其选择的通用 XML 编辑器或脚本编制系统,独立于 WebSphere Application Server 基础结构来生成和编辑这些绑定和扩展文件。
            5. 在 META-INF/ibm-ejb-jar-ext.xml 中定义的扩展

              下表概述了必须放在 META-INF/ibm-ejb-jar-ext.xml 文件中的扩展元素和属性。 接下来的一节列出了显示在另一文件 META-INF/ibm-ejb-jar-ext-pme.xml 中的元素和属性。
          表 3。 用于解析引用和注入目标 的链接目标的元素和属性。 用于解析引用和注入目标的链接目标的元素和属性
          元素或属性
          <jca-adapter 
          activation-spec-binding-name="jms/InternalProviderSpec"
          destination-binding-name="jms/ServiceQueue"/>
          需要 activation-spec-binding-name 属性。 If the corresponding message-drive bean does not identify its message destination by using the <message-destination-link> element, then the 目标绑定名称 attribute is also required. 可根据情况包括 activation-spec-auth-alias 属性。 <ejb-ref> 解析 ejb-ref 声明的目标,该目标是通过 @EJB 注释或通过 ejb-jar.xml 部署描述符中的 ejb-ref 进行声明,在组件作用域的 java:comp/env 名称空间中声明的名称与传统 JVM 作用域的 ejblocal: 或传统全局作用域的 JNDI 名称空间中的目标企业 Bean 的名称之间提供链接。
          <ejb-ref name="com.ejbs.BankAccountServiceBean/s02Ref" 
          binding-name="ejb/session/S02"/>
          需要 name 和 binding-name 属性。
          <message-driven name="EventRecorderBean">
          <jca-adapter 
          activation-spec-binding-name="jms/InternalProviderSpec" 
          destination-binding-name="jms/ServiceQueue"/>
          </message-driven>
          需要 name 属性和 <jca-adapter> 子元素。 <message-destination> Associates the name of a message destination, which is a logical name defined in a Java EE module deployment descriptor, with a specific global JNDI name, which is an actual name in the JNDI namespace. <message-destination-ref> elements in the Java EE module deployment descriptor, or @Resource injection directives that inject message destinations, can then use the <message-destination-line> element to refer to this message-destination by the destination logical name, rather than requiring individual <message-destination-ref> binding entries in the binding file for each defined message-destination-ref.
          <message-destination name="EventProcessingDestination"
          binding-name="jms/ServiceQueue"/>
          需要 name 和 binding-name 属性。 <message-destination-ref> 解析 message-destination-ref 声明的目标,该目标是通过 @Resource 注释或通过 ejb-jar.xml 中的 message-destination-ref 进行声明,在组件作用域的 java:comp/env 名称空间中声明的名称与全局 JNDI 名称空间中目标资源环境的名称之间提供链接。
          <message-destination-ref
          name="com.ejbs.BankAccountServiceBean/serviceQueue"
          binding-name="jms/ServiceQueue"/>
          需要 name 和 binding-name 属性。 <resource-ref> 解析 resource-ref 声明的目标,该目标是通过 @Resource 注释或通过 ejb-jar.xml 中的 resource-ref 进行声明,在组件作用域的 java:comp/env 名称空间中声明的名称与全局 JNDI 名称空间中目标资源的名称之间提供链接。
          <resource-ref 
          name="com.ejbs.BankAccountServiceBean/dataSource" 
          binding-name="jdbc/Default"/>
          需要 name 和 binding-name 属性。 可包括 authentication-alias 或 custom-login-configuration 属性。 <resource-env-ref> 解析 resource-env-ref 声明的目标,该目标是通过 @Resource 注释或通过 ejb-jar.xml 中的 resource-env-ref 进行声明,在组件作用域的 java:comp/env 名称空间中声明的名称与全局 JNDI 名称空间中目标资源环境的名称之间提供链接。
          <resource-env-ref 
          name="com.ejbs.BankAccountServiceBean/dataFactory"
          binding-name="jdbc/Default"/>
          需要 name 和 binding-name 属性。 使用以字符串格式表示的指定值或对象来覆盖环境条目,可对应用于缺省初始上下文的指定查询名称执行 JNDI 查询来访问此对象。
          <env-entry name="java:module/env/taxYear" value="2010"/>
          <env-entry name="java:module/env/taxYear" 
          binding-name="cell/persistent/MyApp/MyModule/taxYear"/
          需要 name 属性以及该值或 binding-name 属性,但不需要同时使用两者。 使用受管资源来覆盖通过 @DataSourceDefinition 注释或应用程序中的数据源元素声明的数据源定义或模块部署描述符。
          <data-source name="java:module/env/myDS" 
          binding-name="jdbc/DB2DS"/>
          需要 name 和 binding-name 属性。 用于标识命名位置 (通常在特定于组件的 java:comp/env 名称空间中) 的属性,用于定义引用/目标链接的 端,例如在 ejb-ref , resource-ref , resource-env-ref , message-destination 或 message-destination-ref 中。
          <ejb-ref name="com.ejbs.BankAccountServiceBean/goodBye"
          binding-name="ejb/session/S02"/>
          binding-name 用于标识传统 ejblocal: 或传统全局作用域的 JNDI 名称空间或 java: 全局名称空间中的命名位置的属性,该名称空间定义引用/目标链接的 目标 端,例如,在 ejb-ref , resource-ref , resource-env-ref , message-destination 或 message-destination-ref 中。
          <ejb-ref name="com.ejbs.BankAccountServiceBean/goodBye"
          binding-name="ejb/session/S02"/>
          <jca-adapter 
          activation-spec-binding-name="jms/InternalProviderSpec"
          destination-binding-name="jms/ServiceQueue"/>
          此名称必须与您为 WebSphere Application Server 定义的 JCA 1.5 激活规范的名称相匹配。 activation-spec-auth-alias 该可选属性标识某一名称,该名称是用于认证到 JCA 资源适配器的连接的 J2C 认证别名名称。 J2C 认证别名指定了用于认证创建到 JCA 资源适配器的新连接的用户标识和密码。
          <jca-adapter 
          activation-spec-binding-name="jms/InternalProviderSpec"
          activation-spec-auth-alias="jms/Service47Alias"
          destination-binding-name="jms/ServiceQueue"/>
          此名称必须与您为 WebSphere Application Server 定义的 J2C 授权别名的名称匹配
          <jca-adapter 
          activation-spec-binding-name="jms/InternalProviderSpec"
          destination-binding-name="jms/ServiceQueue"/>
          此名称必须与您为 WebSphere Application Server 定义的 JMS 队列或主题的名称相匹配。 authentication -alias <resource-ref> 绑定元素的可选子元素。 如果资源引用适用于连接工厂,那么可以指定可选的 JAAS 登录配置;在这种情况下,指的是简单认证别名。
          <resource-ref
          name="com.ejbs.BankAccountServiceBean/dataSource"
          binding-name="jdbc/Default">
          <authentication-alias name="defaultAuth"/>
          <resource-ref>
          此名称必须与您为 WebSphere Application Server 定义的 JAAS 认证别名的名称相匹配。 custom-login-configuration <resource-ref> 绑定元素的可选子元素。 如果资源引用适用于连接工厂,那么可以指定可选的 JAAS 登录配置;在这种情况下,指的是一组属性(“名称/值”对)。
          <resource-ref 
          name="com.ejbs.BankAccountServiceBean/dataSource"
          binding-name="jdbc/Default">
          <custom-login-configuration-name="customLogin">
          <property name="loginParm1" value="ABC123"/>
          <property name="loginParm2" value="DEF456"/>
          </custom-login-configuration> 
          </resource-ref>
          此名称必须与您为 WebSphere Application Server 定义的 JAAS 登录配置的名称相匹配。
          表 4。 META-INF/ibm-ejb-jar-ext.xml 文件 的元素和属性。 META-INF/ibm-ejb-jar-ext.xml 文件的元素和属性
          元素或属性 <time-out> Subelement to the <session> element that optionally declares the number of seconds between method invocations after which a 有状态 session bean might no longer be available.
          <session
           name="ShoppingCartBean">
           <time-out value="600"/>
          </session>
          需要 value 属性(正整数)。
          注: 仅适用于有状态会话 Bean; 不得在无状态 Bean 上使用。

          属性缺省值:300(5 分钟)

          <bean-cache> 元素的属性,用于声明可以激活和钝化 Bean 实例的条件。 应用于有状态会话 Bean。 允许的值及其含义为:
          • TRANSACTION: 表示 Bean 在事务开始时激活并在事务结束时钝化(并会从活动的 EJB 实例高速缓存移除)。
          • ONCE: 表示 Bean 在服务器进程中首次被访问时激活,并在容器离散(例如高速缓存变满)时钝化(并会从活动的 EJB 实例高速缓存移除)。
          • ACTIVITY_SESSION: 指示 Bean 按如下所示激活和钝化:
            1. 在 ActivitySession 边界上,如果激活时存在 ActivitySession 上下文
            2. 在事务边界上,如果激活时存在事务上下文(但是不存在 ActivitySession 上下文),否则
            3. 在调用边界上。
          <global-transaction> <session> 和 <message-driven> 元素的子元素,可以用于声明要在此特定 EJB 类型启动的事务中使用的事务超时(以秒计)(将覆盖全局事务超时的服务器设置),并且还可以声明此 EJB 类型是否在异构 Web Service 环境中传播通过 Web Service 原子事务接收到的全局事务上下文。
          <session
           name="AccountServiceBean"
           <global-transaction
            <global-transaction
           transaction-time-out="180" 
            send-wsat-context="FALSE"/>
          </session>
          至少需要 transaction-time-out 或 send-wsat-context 属性的其中一个。

          属性缺省值: transaction-time-out 的缺省值为服务器事务超时设置;send-wsat-context 的缺省值为 FALSE

          <local-transaction> <session> 和 <message-driven> 元素的子元素,可以用于声明与本地事务相关的设置。 受支持的属性为 boundary、resolver 和 unresolved-action;这些属性为组件配置容器的局部事务包含范围 (LTC) 环境的行为,只要不存在全局事务,容器都会建立此环境。 每个属性的含义为:

          边界

          此设置指定容器边界,必须在此处完成所有包含的资源管理器局部事务 (RMLT)。 可能的值是:
          • BEAN_METHOD: 这是缺省值。 如果选择此选项,那么必须在启动 RMLT 的 Bean 方法中解析这些 RMLT。
          • ACTIVITY_SESSION: RMLT 必须在启动它们的任何 ActivitySession 的作用域中进行解析,如果没有 ActivitySession 上下文,那么必须在启动它们的同一 Bean 方法中进行解析。
          • 此设置指定负责启动和结束 RMLT 的组件。 可能的值是:
            • APPLICATION: 这是缺省值。 应用程序负责启动 RMLT 并在局部事务容器 (LTC) 范围内完成它们。 根据未解析操作属性的值,在 LTC 范围末尾未完成的所有 RMLT 将被容器清除。
            • CONTAINER_AT_BOUNDARY: 容器负责启动 RMLT 并在 LTC 范围中完成它们。 第一次在 LTC 范围内使用连接时,容器将开始 RMLT,并且会在 LTC 范围末尾自动完成它。 如果边界设置为 ActivitySession,那么 RMLT 将登记为 ActivitySession 资源并且由 ActivitySession 引导完成。 如果边界设置为 BeanMethod,那么 RMLT 将由容器在方法结束时落实。
            • 未解析的操作

              此设置指定容器请求 RMLT 执行的指令(如果那些事务在 LTC 范围末尾未解析,并且解析器设置为“应用程序”)。 可能的值是:
              • ROLLBACK: 这是缺省值。 在 LTC 范围末尾,容器将指导所有未解析的 RMLT 回滚。
              • COMMIT: 在 LTC 范围末尾,容器将指导所有未解析的 RMLT 落实。 容器指示 RMLT 仅在不存在未处理异常的情况下进行落实。 如果在局部事务上下文中运行的应用程序方法结束并产生异常,那么容器将回滚所有未解析的 RMLT。 此行为与全局事务的行为相同。
          至少需要 boundary、resolver 或 unresolved-action 属性的其中一个。
          属性缺省值:
          boundary="BEAN_METHOD";
          resolver="APPLICATION";
          unresolved-action=
          "ROLLBACK"
          <method> <method-session-attribute> 和 <run-as-mode> 元素的子元素,用于指定要应用给定设置的方法名称、方法特征符或方法类型。 受支持的属性为 type、name 和 params。 按如下所示描述了每个属性:

          类型

        • UNSPECIFIED: 此设置适用于与 name 属性和 params 属性相匹配的所有方法,而不用考虑接口类型。
        • REMOTE: 此设置适用于与名称和参数属性匹配的远程业务接口和远程组件接口方法。
        • LOCAL: 此设置适用于与 name 属性和/或 params 属性相匹配的本地业务接口、本地组件接口方法和非接口视图。
        • HOME: 此设置适用于与 name 属性和 params 属性相匹配的远程 Home 接口方法。
        • LOCAL_HOME: 此设置适用于与 name 属性和 params 属性相匹配的本地 Home 接口方法。
        • SERVICE_ENDPOINT: 此设置适用于 JAX-RPC 服务端点接口上与 name 属性和 params 属性相匹配的方法。
        • 此设置将应用于的方法的名称,如果此设置将应用于所有方法(无论名称如何),那么将使用星号 (*)。

          params

          此设置将应用于的方法的参数特征符。 如果多种方法使用相同的名称,那么可以使用它来唯一地限定特定的方法。 参数特征符是以逗号分隔的 Java 类型列表。 基本类型仅使用其名称指定; 非基本类型使用其标准类或接口名称 (包括任何 Java 包) 指定, Java 类型的数组由数组元素的类型指定,后跟一对或多对方括号 (例如 int [] [])。

          <session
           /name="AccountServiceBean">
           <method-session-attribute
            type="REQUIRES_NEW">
           <method
            type="LOCAL"
            name="debitAccount" 
            params="java.lang.String[], int,
               com.xyz.CustomerInfo"/>
           </method-session-attribute;>
          </session>
          <run-as-mode> <session> 和 <message-driven> 元素的子元素,可以用于声明在调用另一个方法时给定 EJB 方法将使用的安全标识。 可以将身份设置为使用调用者的身份 (mode = CALLER_IDENTITY) , EJB 服务器的身份 (mode = SYSTEM_IDENTITY) 或特定安全角色的身份 (mode = 说明身份)。
          <session
           name="AccountServiceBean">
           <run-as-mode
             mode="SPECIFIED_IDENTITY">
           <specified-identity
             role="admin"/>
           <method type="UNSPECIFIED" 
             name="testRunAsRole"/>
           </run-as-mode>
          </session>
          需要 mode 属性和 <method> 子元素。 如果方式为 SPECIFIED_IDENTITY,那么还需要 <specified-identity 子元素。 <start-at-app-start> <session> 和 <message-driven> 元素的子元素,可以用于向 EJB 容器通知以下内容:可以在首次启动应用程序时对指定 EJB 类型进行初始化,而非在应用程序首次使用该 EJB 类型时进行初始化。
          <session
           name="AccountServiceBean">
           <start-at-app-startvalue="TRUE"/>
          </session>
          需要 value 属性。

          属性缺省值:对于消息驱动的 Bean 以外的 Bean 均为 FALSE(应用程序首次使用 EJB 时对 EJB 类型进行初始化)。 对于消息驱动的 Bean 总是为 TRUE。

          <resource-ref> Subelement to the <session> and <message-driven> elements, that might be used to declare additional settings on a Java EE resource reference, such as isolation level to be used on transactions driven through the connection referred to by the reference. 允许的属性包括 isolation-level 。 属性定义为如下所示:
          isolation-level
          • TRANSACTION_REPEATABLE_READ: 此隔离级别禁止脏读取和非重复读取,但是它允许幻象读取。
          • TRANSACTION_READ_COMMITTED: 此隔离级别禁止脏读取,但是允许非重复读取和幻象读取。
          • TRANSACTION_READ_UNCOMMITTED: 此隔离级别允许读取未落实的更改(由正在进行的其他事务更改的数据)。 它还允许脏读取、非重复读取和幻象读取。
          • TRANSACTION_SERIALIZABLE: 此隔离级别禁止执行下列类型的读取:
            1. 脏读取,在这种情况下,事务将读取其中包含第二个事务中未落实的更改的数据库行,
            2. 非重复读取,在这种情况下,一个事务将读取一行,第二个事务将更改同一行,并且第一个事务将重新读取该行并获取另外的值,以及
            3. 幻象读取,在这种情况下,一个事务将读取所有满足 SQL WHERE 条件的行,第二个事务将插入也满足 WHERE 条件的行,第一个事务将应用相同的 WHERE 条件并获取第二个事务所插入的行。
            4. 以下各表列示必须放在 META-INF/ibm-ejb-jar-ext-pme.xml 文件中的扩展元素和属性。
              </run-as-server> <run-as-specified name="North American English"> <locale lang="en" country="US" variant="foo"/> <locale lang="en" country="CA" variant="bar" /> <time-zone name="GMT"/> <method type="LOCAL" name="getFoo" params="int"> <ejb name="C03"/> </method> </run-as-specified> <run-as-specified name="North American French"> <locale lang="fr" country="US" variant="foo"/> <locale lang="fr" country="US" variant="bar" /> <time-zone name="GMT" /> <method type="LOCAL" name="getBar" params="int"> <ejb name="C04"/> </method> </run-as-specified> </internationalization>

              旧的 (XMI) 绑定

              现有模块和应用程序可继续使用产品中提供的旧绑定支持,因此,可使用现有工具和向导为应用程序和模块指定绑定和扩展信息。 旧支持仅适用于使用 J2EE 1.4 样式的 XML 部署描述符的 EAR 文件和模块。

              使用 V3.x XML 部署描述符模式或没有 XML 部署描述符文件的 EJB 模块必须使用缺省绑定和自动链接或者用户指定的 XML 绑定文件。

              必须始终用 2.1 XML 部署描述符模式版本将 CMP 实体 Bean 打包在模块中,以便可以使用现有工具来提供映射、绑定和扩展支持。

              用户指定的 XML 绑定

              每个接口的缺省绑定和每个引用的自动链接引用解析均可以通过在创建的 META-INF/ibm-ejb-jar-bnd.xml 文件中指定 EJB 模块的绑定来覆盖。

              描述该格式的模式文件位于 <WAS_HOME>/properties/schemas 目录中。 这种格式的绑定规范只能用于不包含 XML 部署描述符或者包含 EJB 3.x 部署描述符的模块。
              注: 不需要指定所有绑定。 任何未定义的绑定名称或引用均使用缺省绑定和自动链接支持。
              可以为下列 Bean 指定绑定:
              • 使用 <session> 元素的会话 Bean
              • 使用 <message-driven> 元素的消息驱动的 Bean
              表 8。 META-INF/ibm-ejb-jar-ext-pme.xml 中定义的扩展。 在 META-INF/ibm-ejb-jar-ext-pme.xml 中定义的扩展
              元素或属性 有关此扩展的信息,请参阅 "容器国际化" 属性: WebSphere Application Server

              由于此功能的复杂性,您可能希望使用为 WebSphere Application Server 设计的工具 (例如 Rational® Application Developer ) 来生成所需的扩展文件节,然后根据需要修改 XML 文件。

              <activity-sessions> 此元素可以声明要在指定的会话 Bean(BEAN 或 CONTAINER)上使用的活动会话管理的类型,对于容器管理的活动会话,可以声明容器要提供的活动会话行为的类型。
              <activity-sessions>
               <container-activity-session 
                name="Foo" type="NOT_SUPPORTED">
                <methodtype="HOME" name="findByPrimaryKey"
                  params="int">
                 <ejb name="C01"/>
                </method>
               </container-activity-session>
              <./activity-sessions>
              有关此扩展的信息,请参阅“设置 EJB 模块 ActivitySession 部署属性”。

              由于此功能的复杂性,您可能希望使用为 WebSphere Application Server 设计的工具,例如 Rational Application Developer

              </defined-access-intent-policy> <run-as-task name="TestEJB1.ejbs.C01LocalHome.createjava.lang.Integer" type="RUN_AS_SPECIFIED_TASK"> <task name=“/> <method type="LOCAL" name="getFoo" params="int"> <ejb name="C01"/> </method> </run-as-task> <ejb-component-extension ejb="C01"> <task name="SomeTask"/> </ejb-component-extension> </app-profiles>
              由于此功能的复杂性,您可能希望使用为 WebSphere Application Server (例如 Rational Application Developer ) 设计的工具来生成所需的扩展文件节,然后根据需要修改 XML 文件。