Home > java > Spring JMS + JBoss 4.x AS

Spring JMS + JBoss 4.x AS

Sebelum membuat sebuah program yang dapat menggunakan fitur Jboss Messaging, kita harus melakukan konfigurasi pada JBoss AS dan tambahkan entry berikut pada file ‘jbossmq-destinations-service.xml’ yang terletak pada $JBOSS_HOME/server/standard/deploy/jms/.

Perlu diingat bahwa pada saat ini kita menggunakan nama ‘reminderQueue’ sebagai nama resource yang akan digunakan sebagai destination queue.

  <mbean code="org.jboss.mq.server.jmx.Queue"
         name="jboss.mq.destination:service=Queue,name=reminderQueue">
    <depends optional-attribute-name="DestinationManager">
         jboss.mq:service=DestinationManager
    </depends>
    <depends optional-attribute-name="SecurityManager">
        jboss.mq:service=SecurityManager
    </depends>
    <attribute name="SecurityConf">
      <security>
        <role name="guest" read="true" write="true"/>
        <role name="publisher" read="true" write="true" create="false"/>
        <role name="noacc" read="false" write="false" create="false"/>
      </security>
    </attribute>
  </mbean>

Buatlah sebuah Message Listener yang berfungsi untuk melakukan aksi apabila terdapat sebuah message yang disimpan pada Queue ‘reminderQueue’. Method onMessage (Message msg) akan secara otomatis dijalankan apabila terdapat sebuah pesan dikirimkan kepada reminderQueue.

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

public class ReminderReceiver implements MessageListener {

	public void onMessage(Message msg) {
		try {
			if (msg instanceof TextMessage) {
				TextMessage txtMsg = (TextMessage) msg;
				System.out.println("Terdapat Message : " + txtMsg.getText()
						+ " di reminderQueue");
			}

		} catch (JMSException e) {
			e.printStackTrace();
		}
	}
}

Lalu buatlah sebuah class yang berfungsi untuk melakukan koneksi dan mengirimkan suatu pesan kedalam reminderQueue. Pada class ini kita dapat memanfaatkan class JmsTemplate dan MessageCreator dari Spring Framework yang dibuat untuk mempermudah interkoneksi dengan sebuah Messaging Server.

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;

import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

public class ReminderSender {

	private JmsTemplate jmsTemplate;
	private String messageToBeSent;

	public void setJmsTemplate(JmsTemplate jmsTemplate) {
		this.jmsTemplate = jmsTemplate;
	}

	public void setMessage(String message) {
		this.messageToBeSent = message;
	}

	public void send() {
		jmsTemplate.send(new MessageCreator(){
			public Message createMessage(Session sess) throws JMSException {
				return sess.createTextMessage(messageToBeSent);
			}
		});
	}
}

Setelah membuah program sederhana untuk mengirimkan serta melakukan pemrosesan pesan, maka hal yang selanjutnya harus dilakukan adalah membuat sebuah konfigurasi standard Spring Framework (karena saya masih menggunakan spring 2.0) berbentuk XML.

<bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
	<property name="jndiName">
		<value>java:/ConnectionFactory</value>
	</property>
	<property name="jndiEnvironment">
		<props>
			<prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
			<prop key="java.naming.provider.url">jnp://localhost:1099</prop>
			<prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop>
		</props>
	</property>
	<property name="resourceRef">
		<value>true</value>
	</property>
</bean>
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
	<property name="environment">
		<props>
			<prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
			<prop key="java.naming.provider.url">localhost</prop>
			<prop key="java.naming.factory.url.pkgs">org.jnp.interfaces:org.jboss.naming</prop>
		</props>
	</property>
</bean>
<bean id="reminderDestination" class="org.springframework.jndi.JndiObjectFactoryBean">
	<property name="jndiTemplate">
		<ref bean="jndiTemplate" />
	</property>
	<property name="jndiName">
		<value>queue/reminderQueue</value>
	</property>
</bean>

<bean id="reminderJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
	<property name="connectionFactory" ref="jmsConnectionFactory" />
	<property name="defaultDestination" ref="reminderDestination" />
</bean>
<bean id="reminderServiceListener" class="ReminderReceiver" >

</bean>

<bean id="reminderSender" class="ReminderSender">
	<property name="jmsTemplate" ref="reminderJmsTemplate" />
</bean>

<bean id="reminderServiceListenerContainer" class="org.springframework.jms.listener.SimpleMessageListenerContainer">
	<property name="connectionFactory" ref="jmsConnectionFactory" />
	<property name="destination" ref="reminderDestination" />
	<property name="messageListener" ref="reminderServiceListener" />
</bean>
Categories: java Tags:
  1. August 28, 2008 at 4:11 am | #1

    beh..jagoabis.com
    wakkakakakak
    ajarin donk om :D

  2. adhit
    August 28, 2008 at 5:06 am | #2

    beeeh, yang ngajarin gue tentang JMS di Jboss AS comment.
    *nyembah nyembah*
    :D

  1. No trackbacks yet.