通过使用 wsadmin 命令修改 OSGi 组合单元的配置

可以使用 editCompUnit 命令和 AdminConfig 命令来修改包含企业 OSGi 应用程序的组合单元的配置信息。 OSGi 组合单元由一个 EBA 资产、(可选)一个或多个组合捆绑软件扩展以及用于在业务级别应用程序中运行该资产和组合捆绑软件扩展的配置信息组成。 配置信息可以为 OSGi 应用程序包含 HTTP 会话管理、上下文根、虚拟主机、安全角色、run-as 角色、会话企业 bean 的 JNDI 映射、EJB 引用的 JNDI 映射以及 Web 应用程序或蓝图资源引用。

准备工作

可以按本主题中所述使用 wsadmin 命令来修改 OSGi 组合单元的配置,也可以按 修改 OSGi 组合单元的配置中所述使用管理控制台来修改 OSGi 组合单元的配置。

有关此任务

OSGi 组合单元由一个 EBA 资产、(可选)一个或多个组合捆绑软件扩展以及下列某些或全部配置信息组成:
  • 从组合单元到目标应用程序服务器、Web 服务器或集群的映射。
  • 应用程序的会话管理器、上下文根或虚拟主机的配置。
  • 从企业 bean 到 JNDI 名称的映射。
  • 至任何相关联的 Web 应用程序或蓝图资源引用的绑定。
  • 从安全角色到特定用户或组的映射。

将 EBA 资产或组合捆绑软件扩展添加到组合单元时,请先指定该资产或组合捆绑软件扩展的配置。 如果以后更改了该资产或组合捆绑软件扩展中的捆绑软件,或者必须重新映射资源,那么可以更新该配置。 例如,如果您更新 EBA 资产中的捆绑软件或替换组合捆绑软件扩展,那么可能会引入需要其他配置的资源,例如新的或已更改的蓝图资源引用或安全角色映射。

要配置组合单元的所有元素(HTTP 会话管理器除外),可使用 editCompUnit 命令。 要配置 HTTP 会话管理器,请使用 AdminConfig 命令来配置由 appDeploy 变量表示的已部署对象。

在以下过程中,所有步骤和子步骤均为可选步骤。 您只需要重新配置已更改的元素。

过程

  • 配置组合单元的所有元素(HTTP 会话管理器除外)。

    以下每个子步骤都描述了使用 editCompUnit 命令修改组合单元的单一元素的语法。 可以对每个元素运行一次此命令,或者您可以一次性修改若干个元素。

    对于某些元素,您指定的值包含捆绑软件标识。 如果 EBA 资产包含或引用组合捆绑软件,那么命令语法略有不同。 为了清楚起见,在链接的主题中逐步骤说明了组合捆绑软件的不同之处。

    1. 标识要编辑的组合单元。
      通过指定其业务级应用程序标识和组合单元标识来标识特定组合单元。 每当运行 editCompUnit 命令时,必须始终在该命令中包括这两个参数。
      -blaID
      指定业务级别应用程序的配置标识。
      -cuID
      指定组合单元的标识。
      该命令的此方面的 Jython 语法如下:
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=bla_name
        -cuID WebSphere:cuname=cu_name
        ...
      ]') 
      例如:
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=helloWorldService 
        -cuID WebSphere:cuname=com.ibm.ws.eba.helloWorldService_0001.eba
        ...
      ]') 
    2. 映射目标节点和服务器或目标集群。

      您不能编辑可部署单元 URI(对于包含 OSGi 应用程序的组合单元,可部署单元 URI 为 ebaDeploymentUnit)。 您可以编辑目标节点和服务器或目标集群。 要添加其他目标,请使用加号字符 ( + ) 作为前缀。

      如果目标是一个集群,那么该命令在此情况下的 Jython 语法如下所示:
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=bla_name
        -cuID WebSphere:cuname=cu_name
        -MapTargets [[ebaDeploymentUnit WebSphere:cluster=cluster_name]] 
      ]') 
      例如:
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=helloWorldService 
        -cuID WebSphere:cuname=com.ibm.ws.eba.helloWorldService_0001.eba
        -MapTargets [[ebaDeploymentUnit WebSphere:cluster=cluster1]] 
      ]')
      如果目标是两个服务器,那么此命令方面的 Jython 语法如下所示::
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=bla_name
        -cuID WebSphere:cuname=cu_name
        -MapTargets [
          [ebaDeploymentUnit WebSphere:node=node_name,server=server_name+
                             WebSphere:node=node2_name,server=server2_name]] 
      ]') 
      例如:
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=helloWorldService 
        -cuID WebSphere:cuname=com.ibm.ws.eba.helloWorldService_0001.eba
        -MapTargets [
          [ebaDeploymentUnit WebSphere:node=node01,server=server1+
                             WebSphere:node=node01,server=web1]] 
      ]')
    3. 映射 Web 模块的上下文根。

      上下文根确定运行时在哪里找到特定 Web Application Bundle (WAB) 的 Web 页面。 您在此处指定的上下文根与定义的服务器映射共同组成您输入以访问 WAB 页面的完整 URL。 例如,如果应用程序服务器缺省主机是 www.example.com:8080,而 WAB 的上下文根是 /sample,那么可以在 www.example.com:8080/sample 处找到 Web 页面。

      此命令方面的 Jython 语法如下所示 ContextRootStep 下的捆绑软件列表必须包含 OSGi 应用程序中包含的所有 WAB。
      注: 对于组合捆绑软件,语法略有不同。 请参阅 步骤: 映射组合捆绑软件中 Web 模块的上下文根。
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=bla_name
        -cuID WebSphere:cuname=cu_name
        -ContextRootStep [
          [bundle_symbolic_name_1 bundle_version_1 context_root_1]
          [bundle_symbolic_name_2 bundle_version_2 context_root_2]]
      ]') 
      例如,对于包含两个 WAB 的 EBA 文件 (com.ibm.ws.eba.helloWorldService.web 版本为 1.0.0,将映射到 /hello/webcom.ibm.ws.eba.helloWorldService.withContextRoot 版本为 0.9.0,将映射到 /hello/service) ,该命令的这一方面如下所示:
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=helloWorldService 
        -cuID WebSphere:cuname=com.ibm.ws.eba.helloWorldService_0001.eba
        -ContextRootStep [
          [com.ibm.ws.eba.helloWorldService.web 1.0.0 "/hello/web"] 
          [com.ibm.ws.eba.helloWorldService.withContextRoot 0.9.0 "/hello/service"]]
      ]')
    4. 绑定消息驱动的 Bean 的侦听器

      对于在 ejb-jar.xml 文件或组合单元的 @MessageDriven 注释中定义的每个消息驱动的 Bean (MDB) ,可以指定将 MDB 侦听器绑定到 MDB 所需的设置。 通过将侦听器绑定至 MDB 来配置 MDB 与 JMS 目标(MDB 从其接收消息)的关联。

      此命令方面的 Jython 语法如下所示
      注: 对于组合捆绑软件,语法略有不同。 请参阅 步骤: 在组合捆绑软件中绑定消息驱动的 bean 的侦听器
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=bla_name
        -cuID WebSphere:cuname=cu_name
        -MDBBindingsStep [
          [bundle_symbolic_name_1 bundle_version_1 uri_1
             activation_spec_1 destination_jndi_name_1 authentication_alias_1 listener_port_name_1]
          [bundle_symbolic_name_2 bundle_version_2 uri_2
             activation_spec_2 destination_jndi_name_2 authentication_alias_2 listener_port_name_2]]
      ]') 
      在以下示例中, EBA 文件包含两个 EJB 捆绑软件: com.ibm.ws.eba.currencyService 版本为 1.0.0, com.ibm.ws.eba.accountService 版本为 0.9.0。 currencyService 捆绑软件包含名为 ExchangeRateMDB 的消息驱动的 bean(绑定至 JNDI 名称为 eis/ExchangeRate_Act_Spec 的激活规范);激活规范中定义的目标 JNDI 名称被 JNDI 名称为 jms/ExchangeRateQueue 的目标覆盖,而激活规范中定义的认证别名被名为 ExchangeRate_Auth_Alias 的认证别名覆盖。 accountService 捆绑软件包含名为 CustomerDetailsMDB的 MDB ,该 MDB 与 JNDI 名称为 eis/CustomerDetails_Act_Spec的激活规范绑定; 在激活规范中定义的目标 JNDI 名称将被其 JNDI 名称为 jms/CustomerDetailsQueue的目标覆盖,而在激活规范中定义的认证别名将被名为 CustomerDetails_Auth_Alias的认证别名覆盖。
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=financeService 
        -cuID WebSphere:cuname=com.ibm.ws.eba.financeService_0001.eba
        -MDBBindingsStep [
          [com.ibm.ws.eba.currencyService 1.0.0 META-INF/ejb-jar.xml/ExchangeRateMDB 
            eis/ExchangeRate_Act_Spec jms/ExchangeRateQueue ExchangeRate_Auth_Alias] 
          [com.ibm.ws.eba.accountService 0.9.0 META-INF/ejb-jar.xml/CustomerDetailsMDB 
            eis/CustomerDetails_Act_Spec jms/CustomerDetailsQueue CustomerDetails_Auth_Alias]]
      ]') 
    5. 提供 EJB JNDI 名称

      对于组合单元中的每个会话企业 bean,可以指定该企业 bean 在运行时环境中使用的 JNDI 名称。

      此命令方面的 Jython 语法如下所示
      注: 对于组合捆绑软件,语法略有不同。 请参阅 步骤: 在组合捆绑软件中提供 EJB JNDI 名称
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=bla_name
        -cuID WebSphere:cuname=cu_name
        -EJBMappingsStep [
          [bundle_symbolic_name_1 bundle_version_1 ejb_name_1
             ejb_interface_1 ejb_iterface_type_1 jndi_name_1]
          [bundle_symbolic_name_2 bundle_version_2 ejb_name_2
             ejb_interface_2 ejb_iterface_type_2 jndi_name_2]]
      ]') 
      在以下示例中, EBA 文件包含两个 EJB 捆绑软件: com.ibm.ws.eba.currencyService 版本为 1.0.0, com.ibm.ws.eba.accountService 版本为 0.9.0。 currencyService 捆绑软件包含名为 ExchangeRate_ejb 的企业 bean(具有名为 com.ibm.ws.eba.ejb.ExchangeRate 的本地接口),该 EJB 被映射至 JNDI 名称 ejb/ExchangeRate。 accountService 捆绑软件包含名为 CustomerDetails_ejb的企业 Bean 以及名为 com.ibm.ws.eba.ejb.CustomerDetails的远程接口,该接口映射到 JNDI 名称 ejb/CustomerDetails
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=financeService 
        -cuID WebSphere:cuname=com.ibm.ws.eba.financeService_0001.eba
        -EJBMappingsStep [
          [com.ibm.ws.eba.currencyService 1.0.0 ExchangeRate_ejb
            com.ibm.ws.eba.ejb.ExchangeRate Local ejb/ExchangeRate] 
          [com.ibm.ws.eba.accountService 0.9.0 CustomerDetails_ejb
            com.ibm.ws.eba.ejb.CustomerDetails Remote ejb/CustomerDetails]]
      ]') 
    6. 映射 EJB 引用

      对于在 ejb-jar.xml 文件, web.xml 文件或组合单元中的 @EJB 注释中定义的每个 EJB 引用,可以指定在运行时环境中已知 EJB 引用的 JNDI 名称。

      此命令方面的 Jython 语法如下所示
      注: 对于组合捆绑软件,语法略有不同。 请参阅 步骤: 映射组合捆绑软件中的 EJB 引用
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=bla_name
        -cuID WebSphere:cuname=cu_name
        -EJBRefStep [
          [bundle_symbolic_name_1 bundle_version_1 uri_1
             ejb_reference_name_1 business_interface_1 jndi_name_1]
          [bundle_symbolic_name_2 bundle_version_2 uri_2
             ejb_reference_name_2 business_interface_2 jndi_name_2]]
      ]') 
      uri 参数指定定义 EJB 引用的位置。
      在以下示例中, EBA 文件包含两个捆绑软件: com.ibm.ws.eba.currencyService 版本为 1.0.0, com.ibm.ws.eba.accountService 版本为 0.9.0。 currencyService 捆绑软件包含名为 ExchangeRate 的 EJB 引用(从 META-INF/ejb-jar.xml 中定义的 CurrencyExchange 企业 bean 映射至 JNDI 名称 ejb:ExchangeRate)。 accountService 捆绑软件包含名为 CustomerDetails的 EJB 引用 (在 web.xml中定义) ,该 EJB 引用映射到 JNDI 名称 ejb:CustomerDetails
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=financeService 
        -cuID WebSphere:cuname=com.ibm.ws.eba.financeService_0001.eba
        -EJBRefStep [
          [com.ibm.ws.eba.currencyService 1.0.0 META-INF/ejb-jar.xml/CurrencyExchange
            ExchangeRate com.ibm.ws.eba.ejb.ExchangeRate ejb:ExchangeRate]
          [com.ibm.ws.eba.accountService 0.9.0 WEB-INF/web.xml
            CustomerDetails com.ibm.ws.eba.ejb.CustomerDetails ejb:CustomerDetails]]
      ]') 
    7. 将 EJB 资源引用映射到资源

      绑定资源引用会将企业 bean 的资源依赖性映射到服务器运行时环境中可用的实际资源。 至少,可以通过指定 JNDI 名称(资源引用在运行时环境中使用此名称)来实现该映射。 缺省情况下,从既存的绑定检索 JNDI 名称,或者将该名称设为在资源引用定义中指定的映射名称的值。 使用此选项来绑定类型为 resource-ref (资源引用) 的资源,如 Java™ 规范 JSR-250: Java 平台的公共注释。

      此命令方面的 Jython 语法如下所示
      注: 对于组合捆绑软件,语法略有不同。 请参阅 步骤: 将 EJB 资源引用映射到组合捆绑软件中的资源
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=bla_name
        -cuID WebSphere:cuname=cu_name
        -EJBResourceRefs [
          [
          bundle_symbolic_name
          bundle_version
          ejb_name
          resource_reference_id
          resource_type
          target_jndi_name
          resource_authentication_method
          mapping_properties
          extended_properties
          ]]
      ]')
      mapping_properties 参数采用以下格式(一个连续字符串)定义扩展数据源属性的任意名称/值对:
      WebSphere:name=property_name1,value=property_value1,description=property_description1
      +WebSphere:name=property_name2,value=property_value2,description=property_description2
      + ...
      extended_properties 参数采用以下格式(一个连续字符串)定义扩展数据源定制属性:
      property_name1=property_value1+property_name2=property_value2+ ...
      例如:
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=financeService 
        -cuID WebSphere:cuname=com.ibm.ws.eba.financeService_0001.eba
        -EJBResourceRefs [
          [com.ibm.ws.eba.currencyService 1.0.0 ExchangeRate
           dataSource1 javax.sql.DataSource ref/ds1 ClientContainer
           "WebSphere:name=mprop1,value=val1,description=desc1"
           "exprop1=expropval1+exprop2=expropval2"] 
          [com.ibm.ws.eba.accountService 0.9.0 CustomerDetails
           dataSource2 javax.sql.DataSource ref/ds2 WSLogin "" ""]]
      ]') 
    8. 将 EJB 消息目标引用绑定到受管对象。

      绑定消息目标引用或资源环境引用会将企业 bean 的资源依赖性映射到服务器运行时环境中可用的实际资源。 至少,可以通过使用指定 JNDI 名称(消息目标引用或资源环境引用在运行时环境中使用此名称)来实现该映射。 缺省情况下,,或者设为在消息目标引用定义中指定的映射名称的值。 使用此选项可绑定类型为 message-destination-ref (消息目标引用) 或 resource-env-ref (资源环境引用) 的资源,如 Java 规范 JSR-250: Java 平台的公共注释中所定义。

      此命令方面的 Jython 语法如下所示
      注: 对于组合捆绑软件,语法略有不同。 请参阅 步骤: 将 EJB 消息目标引用绑定到组合捆绑软件中的受管对象。
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=bla_name
        -cuID WebSphere:cuname=cu_name
        -EJBMsgDestRefs [
          [
          bundle_symbolic_name
          bundle_version
          ejb_name
          resource_reference_id
          resource_type
          target_jndi_name
      	   ]]
      ]')
      例如:
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=financeService 
        -cuID WebSphere:cuname=com.ibm.ws.eba.financeService_0001.eba
        -EJBMsgDestRefs [
          [com.ibm.ws.eba.currencyService 1.0.0 ExchangeRate
           jms/myQ javax.jms.Queue jms/workQ] 
          [com.ibm.ws.eba.accountService 0.9.0 CustomerDetails
           jms/myT javax.jms.Topic jms/notificationTopic]]
      ]') 
    9. 映射 EJB 环境条目。

      对于在 ejb-jar.xml 文件的 env-entry 元素中或在组合单元的 @Resource 注释中定义的每个简单环境条目,您可以指定该环境条目的值。

      此命令方面的 Jython 语法如下所示
      注: 对于组合捆绑软件,语法略有不同。 请参阅 步骤: 映射组合捆绑软件中的 EJB 环境条目。
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=bla_name
        -cuID WebSphere:cuname=cu_name
        -EJBEnvEntryStep [
          [
          bundle_symbolic_name
          bundle_version
          ejb_name
          env_entry_name
          env_entry_type
          env_entry_description
          env_entry_value
          ]]
      ]')
      例如:
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=financeService 
        -cuID WebSphere:cuname=com.ibm.ws.eba.financeService_0001.eba
        -EJBEnvEntryStep [
          [com.ibm.ws.eba.currencyService 1.0.0
           ExchangeRate CommissionRate java.lang.Double
           "Commission rate applied to currency exchange transactions." 5.75]]
      ]') 
    10. 映射 Web 模块的虚拟主机。

      使用虚拟主机将唯一端口与 Web 应用程序相关联。 虚拟主机的别名标识了为该虚拟主机定义的端口号。 在用来访问 Web 应用程序中的工件(例如 Servlet 和 JavaServer Page (JSP) 文件)的 URL 中,将使用虚拟主机别名中指定的端口号。 例如,别名 myhost:8080 是 URL http://myhost:8080/samplehost_name:port_number 部分。

      在部署的资产中包含的每个 WAB 都必须映射到虚拟主机。 WAB 可以安装在同一虚拟主机上,也可以分散安装在多个虚拟主机上。

      如果在 WAB 的 ibm-web-bnd.xml.xmi 文件中指定现有虚拟主机,那么缺省情况下将设置指定的虚拟主机。 否则,缺省虚拟主机设置为 default_host,它通过其别名提供多个端口号:
      80
      未指定端口号时使用的内部不安全端口
      9080
      内部端口
      9443
      外部安全端口

      除非要将 WAB 与同一节点上的其他 WAB 或资源隔离,否则 default_host 是合适的虚拟主机。 除 default_host外, WebSphere® Application Server 还提供 admin_host,这是管理控制台系统应用程序的虚拟主机。 admin_host 使用端口 9060 运行。 它的安全端口是 9043。 除非 WAB 与系统管理相关,否则请勿选择 admin_host

      此命令方面的 Jython 语法如下所示
      注: 对于组合捆绑软件,语法略有不同。 请参阅 步骤: 映射组合捆绑软件中 Web 模块的虚拟主机。
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=bla_name
        -cuID WebSphere:cuname=cu_name
        -VirtualHostMappingStep [
          [bundle_symbolic_name_1 bundle_version_1 
          web_module_name_1 virtual_host_1]
          [bundle_symbolic_name_2 bundle_version_2 
           web_module_name_2 virtual_host_2]]
      ]') 
      例如,对于包含两个 WAB 的 EBA 文件 (com.ibm.ws.eba.helloWorldService.web 版本为 1.0.0,将映射到 default_hostcom.ibm.ws.eba.helloWorldService.withContextRoot 版本为 0.9.0,将映射到 test_host) ,该命令的这一方面如下所示:
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=helloWorldService 
        -cuID WebSphere:cuname=com.ibm.ws.eba.helloWorldService_0001.eba
        -VirtualHostMappingStep [
          [com.ibm.ws.eba.helloWorldService.web 1.0.0 
          "HelloWorld service" default_host]
          [com.ibm.ws.eba.helloWorldService.withContextRoot 0.9.0 
          "HelloWorld second service" test_host]]
      ]') 
    11. 将安全角色映射到用户或组。
      该命令的此方面的 Jython 语法如下:
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=bla_name
        -cuID WebSphere:cuname=cu_name
        -MapRolesToUsersStep [
          [role_name everyone? 
          all_authenticated_in_realm? 
          usernames groups all_authenticated_in_trusted_realms?]]
      ]') 
      密钥:
      • role_name 是应用程序中定义的角色名称。
      • 每个用户吗? 将设置为 YesNo,以指定是否每个人都具有该角色。
      • all_authenticated_in_realm? 将设置为 YesNo,以指定是否所有已认证的用户都可以访问应用程序域。
      • usernamesWebSphere Application Server 用户名的列表,以 | 字符分隔。
      • groupsWebSphere Application Server 组的列表,以 | 字符分隔。
      • all_authenticated_in_trusted_realms? (可选) 设置为 YesNo,以指定在可信域中认证的所有用户是否都可以访问资源。
      注: 对于 用户名,空字符串 "" 表示使用缺省值或现有值。 缺省值通常是不将任何用户或组绑定到角色。 但是,当应用程序包含 ibm-application-bnd.xmi 文件时,将从此文件获取 usernames 的缺省值。 如果要部署包含 ibm-application-bnd.xmi 文件的应用程序,并且要除去绑定的用户,请仅指定 | 字符 (这是多个用户名的分隔符)。 此设置将明确地指定“无用户”,因此保证不会将任何用户绑定到该角色。
      例如:
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=helloWorldService 
        -cuID WebSphere:cuname=com.ibm.ws.eba.helloWorldService_0001.eba
        -MapRolesToUsersStep [
          [ROLE1 No Yes "" ""] 
          [ROLE2 No No WABTestUser1 ""] 
          [ROLE3 No No "" WABTestGroup1] 
          [ROLE4 Yes No "" ""]]
      ]')
    12. 将 RunAs 角色映射至用户
      可以将指定的用户标识和密码映射到 RunAs 角色。 此映射使您可以为各个用户指定特定于应用程序的特权,以便他们可以使用其他用户标识运行特定的任务。 该命令的此方面的 Jython 语法如下:
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=bla_name
        -cuID WebSphere:cuname=cu_name
        -MapRunAsRolesToUsersStep [
          [role_name user_name password]]
      ]') 
      例如:
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=helloWorldService 
        -cuID WebSphere:cuname=com.ibm.ws.eba.helloWorldService_0001.eba
        -MapRunAsRolesToUsersStep [
          [Role1 User1 password1]
          [AdminRole User3 password3]]
      ]')
    13. 将认证别名添加到 "蓝图" 资源引用。

      蓝图组件可以访问 WebSphere Application Server 资源引用。 每个引用都在 "蓝图" XML 文件中声明,并且可以使用 Java Platform, Enterprise Edition (Java EE) 连接器体系结构 (JCA) 认证别名进行保护。 OSGi 应用程序中的每个捆绑软件可以在其各个“蓝图”XML 文件中包含任意数量的资源引用声明。

      在保护资源引用时,只能将那些资源引用绑定到部署了应用程序的每个服务器或集群上存在的 JCA 认证别名。 OSGi 应用程序可部署到位于同一安全域的多个服务器和集群。 因此,每个 JCA 认证别名必须在目标服务器和集群的安全域或全局安全域中存在。

      必须在蓝图 XML 文件中声明资源引用。 例如:
      <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" 
        xmlns:rr="http://www.ibm.com/appserver/schemas/8.0/blueprint/resourcereference">
        <!-- Other Blueprint declarations ... -->
        
        <rr:resource-reference id="resourceRef" 
                interface="javax.sql.DataSource"
                filter="(osgi.jndi.service.name=jdbc/Account)">
          <rr:res-auth>Container</rr:res-auth>
          <rr:res-sharing-scope>Shareable</rr:res-sharing-scope>
        </rr:resource-reference>
      </blueprint>
      此声明包括资源引用标识(例如,resourceRef)、服务过滤器(例如,jdbc/Account)、认证类型(例如,Container)和共享设置(例如,Shareable)。
      每个捆绑软件对认证别名绑定的蓝图资源引用存储在该捆绑软件的 META-INF 目录的 ibm-eba-bnd.xml 文件中。 如果 OSGi 应用程序在部署为资产时包含这些文件中的任何文件,那么这些文件将提供在绑定资源引用时使用的缺省认证别名值。 例如:
      <eba-bnd>
        <resource-ref>
          <jndi-name>jdbc/Acount</jndi-name>
          <authentication-alias>Alias1</authentication-alias>
          <interface>javax.sql.DataSource</interface>
          <authentication>Container</authentication>
          <sharing-scope>Shareable</sharing-scope>
          <id>resourceRef</id>
        </resource-ref>
      </eba-bnd>
      此命令方面的 Jython 语法如下所示
      注: 对于组合捆绑软件,语法略有不同。 请参阅 步骤: 向组合捆绑软件中的 Blueprint 资源引用添加认证别名。
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=bla_name
        -cuID WebSphere:cuname=cu_name
        -BlueprintResourceRefPostDeployStep [
          [
          bundle_symbolic_name 
          bundle_version 
          blueprint_resource_reference_id 
          interface_name 
          jndi_name 
          authentication_type 
          sharing_setting 
          authentication_alias_name
          ]]
      ]')
      注: jndi_name 的值必须与您在 "蓝图" XML 文件的资源引用元素的 filter 属性中声明的 JNDI 名称相匹配。
      例如,对于包含 com.ibm.ws.eba.helloWorldService.properties.bundle.jar 版本为 1.0.0的捆绑软件 (将绑定到认证别名 alias1) 的 EBA 文件,命令如下所示:
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=helloWorldService 
        -cuID WebSphere:cuname=com.ibm.ws.eba.helloWorldService_0001.eba
        -BlueprintResourceRefPostDeployStep[
          [com.ibm.ws.eba.helloWorldService.properties.bundle 1.0.0 resourceRef 
          javax.sql.DataSource jdbc/Account Container Shareable alias1]]
      ]')
    14. 将 Web 模块消息目标引用绑定到受管对象。

      绑定资源引用会将 Web 应用程序的资源依赖性映射到服务器运行时环境中可用的实际资源。 至少,可以通过使用指定 JNDI 名称(资源在运行时环境中使用此名称)来实现该映射。 缺省情况下, JNDI 名称是在开发 Web 应用程序捆绑软件 (WAB) 期间在 web.xml 文件中指定的资源标识。 使用此选项可绑定类型为 message-destination-ref (消息目标引用) 或 resource-env-ref (资源环境引用) 的资源,如 Java 规范 JSR-250: Java 平台的公共注释中所定义。

      此命令方面的 Jython 语法如下所示
      注: 对于组合捆绑软件,语法略有不同。 请参阅 步骤: 将 Web 模块消息目标引用绑定到组合捆绑软件中的受管对象。
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=bla_name
        -cuID WebSphere:cuname=cu_name
        -WebModuleMsgDestRefs [
          [
          bundle_symbolic_name
          bundle_version
          resource_reference_id
          resource_type
          target_jndi_name
      	   ]]
      ]')
      例如:
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=helloWorldService 
        -cuID WebSphere:cuname=com.ibm.ws.eba.helloWorldService_0001.eba
        -WebModuleMsgDestRefs [
          [com.ibm.ws.eba.helloWorldService.web 1.0.0 
          jms/myQ javax.jms.Queue jms/workQ] 
          [com.ibm.ws.eba.helloWorldService.web 1.0.0 
          jms/myT javax.jms.Topic jms/notificationTopic]]
      ]') 
    15. 将 Web 模块资源引用映射到资源。

      绑定资源引用会将 Web 应用程序的资源依赖性映射到服务器运行时环境中可用的实际资源。 至少,可以通过使用指定 JNDI 名称(资源在运行时环境中使用此名称)来实现该映射。 缺省情况下, JNDI 名称是在开发 Web 应用程序捆绑软件 (WAB) 期间在 web.xml 文件中指定的资源标识。 使用此选项可绑定类型为 resource-ref 的资源 (资源引用) ,如 Java 规范 JSR-250: Java 平台的公共注释。

      此命令方面的 Jython 语法如下所示
      注: 对于组合捆绑软件,语法略有不同。 请参阅 步骤: 将 Web 模块资源引用映射到组合捆绑软件中的资源。
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=bla_name
        -cuID WebSphere:cuname=cu_name
        -WebModuleResourceRefs [
          [
          bundle_symbolic_name
          bundle_version
          resource_reference_id
          resource_type
          target_jndi_name
          login_configuration
          login_properties
          extended_properties
      	   ]]
      ]')
      例如:
      AdminTask.editCompUnit('[
        -blaID WebSphere:blaname=helloWorldService 
        -cuID WebSphere:cuname=com.ibm.ws.eba.helloWorldService_0001.eba
        -WebModuleResourceRefs [
          [com.ibm.ws.eba.helloWorldService.web 1.0.0 
          jdbc/jtaDs javax.sql.DataSource 
          jdbc/helloDs "" "" ""] 
          [com.ibm.ws.eba.helloWorldService.web 1.0.0 
          jdbc/nonJtaDs javax.sql.DataSource 
          jdbc/helloDsNonJta "" "" "extprop1=extval1"]]
      ]') 
      注: 如果使用多个扩展属性,那么 Jython 语法为 "extprop1=extval1,extprop2=extval2"
  • 配置 HTTP 会话管理器。

    要配置 HTTP 会话管理器,请使用 AdminConfig 命令来配置由 appDeploy 变量表示的已部署对象。 Session management for OSGi 应用程序的配置方式与企业应用程序相同,只是获取已部署对象时的语法有细微差别。

    1. 获取已部署的对象。
      使用 使用脚本编制配置应用程序以进行会话管理中提供的指示信息。 请记住,对于企业应用程序,应使用以下两行脚本:
      deployments = AdminConfig.getid('/Deployment:myApp/')
      appDeploy = AdminConfig.showAttribute(deployments, 'deployedObject')
      对于 OSGi 应用程序,等价脚本为以下单行脚本:
      appDeploy = AdminTask.getOSGiApplicationDeployedObject('-cuName cu_name')
      其中 cu_name 是组合单元的名称。 例如:
      appDeploy = AdminTask.getOSGiApplicationDeployedObject('
        -cuName com.ibm.ws.eba.helloWorldService_0001.eba')
    2. 创建或修改会话管理选项。

      使用 使用脚本编制配置应用程序以进行会话管理中提供的指示信息。 对于企业应用程序和 OSGi 应用程序,用于创建和修改会话管理选项的命令用法完全相同。

下一步做什么?

使用这些命令后,通过使用以下命令将更改保存到配置库:

AdminConfig.save()

保存对组合单元的更改时,将更新相关联的业务级别应用程序以使用新配置。 如果业务级别应用程序正在运行,那么将立即应用捆绑软件和配置更新。

如果有可能(即,取决于更新的性质),系统会应用更新而无需重新启动应用程序。 如果您更新只为应用程序的其他部分提供 OSGi 服务的捆绑软件,那么仅重新启动该捆绑软件。 如果您更新为其他捆绑软件提供一个或多个包的捆绑软件,那么重新启动该捆绑软件以及它们为其提供包的任何捆绑软件。 但是,如果添加了新包或服务依赖性,或者除去了现有包或服务依赖性,那么将重新启动应用程序;新添加的包和服务可以来自新供应的捆绑软件或已供应的捆绑软件。

如果您的应用程序具有引用了服务捆绑软件中企业 bean 的客户机捆绑软件,那么为了防止在更新该服务捆绑软件时重新启动该应用程序,请按以下其中一种方式配置企业 bean 依赖性:
  • 在服务捆绑软件的捆绑软件清单文件的 Export-EJB 头中声明企业 Bean ,以便在 OSGi 服务注册表中注册企业 Bean ,并使用客户机捆绑软件的 Blueprint XML 文件中的引用元素来注入和调用企业 Bean; 有关更多信息,请参阅 引用和 Blueprint Container。 此过程是配置 EJB 依赖性的首选方法。
  • 在客户机捆绑软件中,在 @EJB 注释或绑定 XML 文件中声明对目标企业 Bean 的 EJB 引用,并在部署应用程序时将 EJB 引用映射到 EJB JNDI 名称; 有关更多信息,请参阅 EJB 引用 [设置]
如果您未通过使用 Export-EJB 头或将 EJB 引用绑定至 JNDI 来声明企业 bean,那么当您部署应用程序时会自动生成 JNDI 绑定(只要在 EJB 类实现的接口与在 EJB 引用中指定的接口之间有且仅有一个匹配)。 但是,生成的 JNDI 名称包含捆绑软件版本,该捆绑软件版本在您更新捆绑软件时会更改;在此情况下,当您更新组合单元时,会重新生成 JNDI 以包含更新后的版本,并且此配置更改会导致应用程序重新启动。