Use the message-driven beans (MDB) to connect to the embedded messaging server.
Enable MDB support in the Liberty profile by configuring the jmsMdb-3.1 and wasJmsClient-1.1 features in the server.xml file. If you want to perform a JNDI lookup, then you must also add the jndi-1.0 feature along with the other two features.
<featureManager>
<feature>jmsMdb-3.1</feature>
<feature>wasJmsClient-1.1</feature>
<feature>jndi-1.0</feature>
</featureManager>
Configuring the wasJmsClient-1.1 feature enables the users to define the required JMS resources and enables MDB to interact with the messaging engine.
<jmsActivationSpec id="JMSSample/JMSSampleMDB">
<properties.wasJms destinationRef="jndi/MDBQ" />
</jmsActivationSpec>
<jmsQueue id=”jndi/MDBQ” jndiName="jndi/MDBQ">
<properties.wasJms queueName="Q1"/>
</jmsQueue>
The <destinationRef> refers to the ID of <jmsQueue>. If an ID in <jmsQueue> is not mentioned, then <destinationRef> must point to the <jndiName> of the <jmsQueue>.
Liberty profile supports defining annotations for MDBs that can be used with the activation specification property defined in the server.xml file. In order to use the annotation, first define the activation specification property as mentioned in the previous step. And for each of the MDB, user can define the annotations as shown in the following example:
@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) {
}
}
You can also use this binding file to define the resource information that is required for the MDB to connect to the messaging engine. When you are using the EJB binding file, the activation specification property ID need not necessarily be in the format of application name/module name/bean name as mentioned in step 1.
<jmsActivationSpec id="PriceChangeAS">
<properties.wasJms destinationRef="jms/TriggerQ" />
</jmsActivationSpec>
<jmsQueue id=”jms/TriggerQ” jndiName="jms/TriggerQ">
<properties.wasJms queueName="Q1"/>
</jmsQueue>
<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>