部署消息驱动的 Bean 以连接至嵌入式消息传递服务器

使用消息驱动的 Bean (MDB) 来连接至嵌入式消息传递服务器。

关于此任务

Liberty 服务器中,可以采用以下两种方案来配置 MDB:
  • 当 MDB 和消息传递引擎在同一 Liberty 服务器上时。
  • 当 MDB 连接至正在另一 Liberty 服务器上运行的远程消息传递引擎时。
    此图描述了 MDB 的两种配置方案。第一种方案是:当消息传递引擎和 MDB 在同一 Liberty 服务器上时。第二种方案是:当 MDB 连接至位于另一服务器上的消息传递引擎时。

过程

  1. 配置 MDB 功能部件:

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

    <featureManager>
         <feature>jmsMdb-3.1</feature>
         <feature>wasJmsClient-2.0</feature>
         <feature>jndi-1.0</feature>
    </featureManager>

    配置 wasJmsClient-2.0 功能部件使用户能够定义必需的 JMS 资源,并且使 MDB 能够与消息传递引擎进行交互。

    要点: wasJmsClient-2.0 功能部件支持 JMS 1.1 和 JMS 2.0 规范的功能部件。但是,如果只想使用符合 JMS 1.1 规范的功能部件,那么可选择使用 wasJmsClient-1.1 功能部件。
  2. 配置使用 JMS 资源适配器的 JCA 激活规范,以便 MDB 充当特定 JMS 目标的侦听器。下面采用不同的方法来配置 MDB 以与消息传递引擎进行交互。
    1. 使用激活规范属性来配置 MDB。
      可以在 server.xml 文件中定义此属性,以便 MDB 可以使用此属性来侦听特定 JMS 目标。
      <jmsActivationSpec id="JMSSample/JMSSampleMDB">
           <properties.wasJms destinationRef="jndi/MDBQ"  />
      </jmsActivationSpec>
      
      <jmsQueue id="jndi/MDBQ" jndiName="jndi/MDBQ">
           <properties.wasJms queueName="Q1"/>
      </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 文件中定义的激活规范属性。

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

      @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 在连接至消息传递引擎时所需要的资源信息。当您使用 EJB 绑定文件时,激活规范属性标识不一定需要采用步骤 1 中所提到的 application name/module name/bean name 格式。

      server.xml 中添加激活规范属性信息。
      <jmsActivationSpec id="PriceChangeAS">
           <properties.wasJms destinationRef="jms/TriggerQ" />
      </jmsActivationSpec>
      
      <jmsQueue id="jms/TriggerQ" jndiName="jms/TriggerQ">
           <properties.wasJms queueName="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_mdbsib.html