部署訊息驅動 Bean 來連接內嵌傳訊伺服器
使用 訊息驅動 Bean (MDB) 來連接內嵌傳訊伺服器
關於這項作業
下列兩種實務可以將 MDB 配置在 Liberty 伺服器中:
- 當 MDB 和傳訊引擎是在相同的 Liberty 伺服器上。
- 當 MDB 連接到執行於不同 Liberty 伺服器的遠端傳訊引擎。
程序
- 配置 MDB 特性:
請在 server.xml 檔中配置 jmsMdb-3.1 和 wasJmsClient-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 特性。 - 配置 JCA 啟動規格以使用 JMS 資源配接器,使 MDB 用來作為特定 JMS 目的地上的接聽器。您可以利用下列不同的方式來配置 MDB 與傳訊引擎互動。
- 使用啟動規格內容來配置 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> 的 ID。如果未提及 <jmsQueue> 中的 ID,<destinationRef> 必須指向 <jmsQueue> 的 <jndiName>。
註: ID 值的格式必須是 application name/module name/bean name,其中- application name 是所部署的應用程式名稱(例如 JMSSample)。 只有在 Bean 是包裝在 EAR 檔內時,才適用這個應用程式名稱。 應用程式預設為 EAR 檔的基本名稱,除非 application.xml 部署描述子有所指定,否則不含副檔名。
- module name 是包裝 Bean 的模組名稱。 在獨立式 ejb-jar 檔或 WAR 檔中,<module-name> 預設為移除了任何副檔名的模組基本名稱。在 EAR 檔中,<module-name> 預設為模組路徑名稱,移除了任何副檔名,但包含任何目錄名稱。 您可以利用 ejb-jar.xml(適用於 ejb-jar 檔)或 web.xml(適用於 WAR 檔)的 module-name 元素來置換預設的 <module-name>。
- bean name 是 Enterprise Bean 的 ejb-name。 如果是透過註釋來定義的 Enterprise Bean,除非在 MessageDriven 註釋 name() 屬性內容中加以指定,否則 Bean 名稱的預設值為 Session Bean 類別的非限定名稱。如果是透過 ejb-jar.xml 來定義的 Enterprise Bean,它是指定在 <ejb-name> 部署描述子元素中。
- 連同 server.xml 檔中所定義的啟動規格內容來使用註釋。
對於可搭配 server.xml 檔中所定義的啟動規格內容使用的 MDB,Liberty 支援定義其註釋。如果要使用註釋,請先依照上一步所述來定義啟動規格內容。 對於每個 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) { } }
- 使用 EJB 連結檔 (ibm-ejb-jar-bnd.xml)。
您也可以利用這個連結檔來定義 MDB 連接到傳訊引擎所需要的資源資訊。 當您使用 EJB 連結檔時,啟動規格內容 ID 不需要如步驟 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 檔中指定的啟動規格內容 ID 值。 在 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 檔名稱。 比方說,如果 MDB 包含在 PriceChangeEJB.jar 中,則 moduleName 屬性為 PriceChangeEJB。
- 使用啟動規格內容來配置 MDB。
上層主題: 在 Liberty 內部署訊息驅動 Bean

檔名:twlp_dep_msg_mdbsib.html