部署消息驱动的 Bean 以连接至 JCA 资源适配器

可以使用消息驱动的 Bean (MDB) 连接至 JCA 资源适配器。

关于此任务

将消息驱动的 bean (MDB) 应用程序部署到 Liberty 时,需要在 server.xml 文件中执行某个配置以使每个 MDB 能够从资源适配器接收消息。本主题中描述的示例配置适用于仅包含消息驱动的 Bean 和 JMS 资源适配器的应用程序。如果该应用程序还将使用会话 Bean,那么必须包括 ejbLite-3.1 功能部件。

配置属性将随所使用的特定资源适配器不同而不同。

过程

  1. 配置 MDB 功能部件:

    通过在 server.xml 文件中配置 mdb-3.1jca-1.6 功能部件,在 Liberty 中启用 MDB 支持。如果要执行 JNDI 查找,那么还必须将 jndi-1.0 功能部件与其他两个功能部件一起添加。

    <featureManager>
         <feature>mdb-3.1</feature>
         <feature>jca-1.6</feature>
         <feature>jndi-1.0</feature>
    </featureManager>
  2. 配置 JCA 资源适配器所需要的任何其他功能部件。
  3. 配置使用该资源适配器的 JCA 激活规范,以便 MDB 充当侦听器。下列示例说明您可以采用不同的方式来配置 MDB 以与消息传递引擎进行交互。这些示例特定于 JMS 资源适配器。
    1. 使用激活规范属性来配置 MDB。
      可以在 server.xml 文件中定义此属性,以便 MDB 可以使用此属性来侦听特定 JMS 目标。
      <activationSpec id="JMSSample/JMSSampleMDB">
           <properties.wmqJms destinationRef="jndi/MDBQ" transportType="CLIENT" queueManager="myQM" hostName="myHost" port="1414"/>
      </activationSpec>
      
      <jmsQueue id=”jndi/MDBQ” jndiName="jndi/MDBQ">
           <properties.wmqJms baseQueueName="MYQ" baseQueueManagerName="myQM"/>
      </jmsQueue>

      <destinationRef> 是指 <jmsQueue> 的标识。如果未提到 <jmsQueue> 中的标识,那么 <destinationRef> 元素必须指向 <jmsQueue> 的 <jndiName>。

      注: 标识值的格式必须为 application name/module name/bean name,其中:
      • application name 是已部署的应用程序的名称(例如,JMSSample)。仅当将 Bean 打包在 EAR 文件中时,应用程序名称才适用。应用程序名称缺省设置为 EAR 文件的基本名称,不带文件扩展名,除非 application.xml 部署描述符指定了应用程序名称。
      • module name 是用来打包该 Bean 的模块的名称。在独立 ejb-jar 文件或者 WAR 文件中,<module-name> 缺省设置为模块的基本名称,移除了所有文件扩展名。在 WAR 文件中,<module-name> 缺省设置为模块的路径名,并且移除了所有文件扩展名,但是包括了所有目录名称。可以使用 ejb-jar.xml(对于 ejb-jar 文件)或者 web.xml(对于 WAR 文件)的 module-name 元素来覆盖缺省 <module-name>。
      • bean name 是企业 Bean 的 ejb-name。对于通过注释定义的企业 Bean,Bean 名称缺省设置为会话 Bean 类的非限定名称,除非在 MessageDriven 注释的 name() 属性的内容中指定。对于通过 ejb-jar.xml 定义的企业 bean,在 <ejb-name> 部署描述符元素中指定了 bean 名称。
    2. 通过将注释与 server.xml 文件中所定义的激活规范属性配合使用来配置 MDB。

      Liberty 支持为消息驱动的 bean 定义注释,可以将注释与 server.xml 文件中定义的激活规范属性配合使用。要使用注释,请如前一步骤中提到的那样首先定义激活规范属性。对于每个消息驱动的 Bean,您可以如以下示例中所示定义注释:

      @MessageDriven(
      		  		  name = "JMSSampleMDB",
      		  		  activationConfig = {
      		    		    @ActivationConfigProperty(propertyName  = "destinationType", 
      		                              		                              propertyValue = "javax.jms.Queue"),
      		    		    @ActivationConfigProperty(propertyName  = "userName", 
      		                              		                              propertyValue = "user1"),
      		    		    @ActivationConfigProperty(propertyName  = "password",
      		                              		                              propertyValue = "user1pwd"),	
      		    		    @ActivationConfigProperty(propertyName  = "destination", 
      		                              		                              propertyValue = "jndi_INPUT_Q")                         
      		  }
      		)
      public class JMSSampleMDB implements MessageListener{
      	
      	 	 @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
      	  public void onMessage(Message message) {
      	 }
      }
    3. 使用 EJB 绑定文件 ibm-ejb-jar-bnd.xml 来配置 MDB。

      您还可以使用此绑定文件来定义 MDB 在连接至消息传递引擎时所需要的资源信息。当您使用 EJB 绑定文件时,激活规范属性标识不是一定需要采用步骤 a 中所提到的 application name/module name/bean name 格式。

      server.xml 文件中添加激活规范属性信息。
      <activationSpec id="PriceChangeAS">
           <properties.wmqJms destinationRef="jms/TriggerQ" transportType="CLIENT" queueManager="myQM" hostName="myHost" port="1414"/>
      </activationSpec>
      
      <jmsQueue id=”jms/TriggerQ” jndiName="jms/TriggerQ">
           <properties.wmqJms baseQueueName="Q1"/>
       </jmsQueue>
      ibm-ejb-jar-bnd.xml 文件中添加以下 MDB 绑定信息。
      <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_1.xsd" 
      	(http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_1.xsd%27) version="1.1">
          
      	<message-driven name="PriceChangeMDBBean">
              	<jca-adapter activation-spec-binding-name="PriceChangeAS" destination-binding-name="jms/TriggerQ" />
         	</message-driven>
      </ejb-jar-bnd>
      注: 使用 EJB 绑定文件时,ibm-ejb-jar-bnd.xml 文件中的 activation-spec-binding-name 属性必须指向 server.xml 文件中所指定的激活规范属性标识值。
    4. [17.0.0.1 and later]还可以在 server.xml 文件中 <application> 元素下指定资源信息。server.xml 配置信息的形式与 ibm-ejb-jar-bnd.xml文件中指定的信息形式相同。例如:
      <application location="PriceChangeApp.ear">
      	<ejb-jar-bnd moduleName="PriceChangeEJB">       
      	   <message-driven name="PriceChangeMDBBean">
              	<jca-adapter activation-spec-binding-name="PriceChangeAS" destination-binding-name="jms/TriggerQ" />
      	   </message-driven>
      	</ejb-jar-bnd>	</application>
      注: 必须指定 <ejb-jar-bnd> 元素的 moduleName 属性。值为包含 MDB 且不带 .jar 扩展名的 JAR 文件的名称。例如,如果在 PriceChangeEJB.jar 中包含了 MDB,那么 moduleName 属性为 PriceChangeEJB

用于指示主题类型的图标 任务主题

文件名:twlp_dep_msg_mdbjca.html