Pada kesempatan kali ini saya akan membahas sedikit mengenai Spring JMS.
Pada sebuah aplikasi tertentu, biasanya fasilitas messaging sangat diperlukan. Nah, java menyediakan API untuk memecahkan masalah tersebut. Ini dikenal dengan JMS(Java Messaging Service). Spring juga melakukan integrasi terhadap teknologi ini. Inilah yang disebut dengan Spring JMS. Ok, karena saya juga baru belajar sedikit,(Baru dapat membayangkan) tadi pagi mari kita coba saja…
JMS menyediakan beberapa fungsi untuk mengirim dan menerima pesan melalui tujuan tertentu.
Didalam JMS kita akan menemukan beberapa fungsi seperti berikut :
- Message Producers : Digunakan untuk membuat pesan
- Message Consumers : Digunakan untuk membaca pesan
- Message : Berisi informasi tertentu
- Connections and Destination : Digunakan untuk melakukan koneksi dan tujuan dari pesan
Spring JMS, menyediakan template yaitu JmsTemplate yang mengizinkan kita menggunakan JMS dengan lebih sederhana.
Dalam contoh inti saya akan membuat sebuah fasilitas messaging yang sangat sederhana. Aplikasi ini terdiri dari dua user. Masing-masing user akan dapat saling berkomunikasi.
Pertama-tama kita buat sebuah base kelas yang berisi method getter setter untuk menerima dan mengirimkan pesan tertentu.
public class UserMesage {
private String content;
private String username;
//getter setter
}
Kemudian kita buatkan interfacenya :
public interface Receiver {
public UserMesage receiveMessage();
}
public interface Sender {
public void sendMessage(UserMesage userMesagge);
}
Interface diatas nantinya akan digunakan untuk melakukan pengiriman dan penerimaan pesan. Berikut implementasinya :
package org.kris.service;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.Session;
import org.kris.user.UserMesage;
import org.springframework.jms.core.MessageCreator;
import org.springframework.jms.core.support.JmsGatewaySupport;
/**
*
* @author kris
*/
public class SenderService extends JmsGatewaySupport implements Sender {
public void sendMessage(final UserMesage userMesagge) {
getJmsTemplate().send(new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
MapMessage message = session.createMapMessage();
message.setString("username", userMesagge.getUsername());
message.setString("content", userMesagge.getContent());
return message;
}
});
}
}
Implementasi diatas berguna untuk mengirimkan pesan dengan menggunakan JmsTemplate. Kita membutuhkan Session untuk membuat pesan. Kita juga membutuhkan destination dari pesan. Semua sudah diatur oleh JmsTemplate.
public void send(MessageCreator messageCreator) throws JmsException {
Destination defaultDestination = getDefaultDestination();
if (defaultDestination != null) {
send(defaultDestination, messageCreator);
}
else {
send(getRequiredDefaultDestinationName(), messageCreator);
}
}
Kode diatas adalah isi dari method send yang terdapat didalam kelas JmsTemplate. Nantinya kita akan melakukan injeksi didalam container spring untuk mengatur koneksi dan destination yang dibutuhkan.
package org.kris.service;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import org.kris.user.UserMesage;
import org.springframework.jms.core.support.JmsGatewaySupport;
import org.springframework.jms.support.JmsUtils;
/**
*
* @author kris
*/
public class ReceiverService extends JmsGatewaySupport implements Receiver {
public UserMesage receiveMessage() {
MapMessage message = (MapMessage) getJmsTemplate().receive();
try {
UserMesage userMesagge = new UserMesage();
userMesagge.setUsername(message.getString("username"));
userMesagge.setContent(message.getString("content"));
return userMesagge;
} catch (JMSException exception) {
throw JmsUtils.convertJmsAccessException(exception);
}
}
}
Kelas diatas berfungsi untuk menerima pesan. Ini adalah method receive yang digunakan untuk menerima pesan.
public Message receive() throws JmsException {
Destination defaultDestination = getDefaultDestination();
if (defaultDestination != null) {
return receive(defaultDestination);
}
else {
return receive(getRequiredDefaultDestinationName());
}
}
Nah, sebelumnya kita perlu mendownload Apache ActiveMQ http://activemq.apache.org/ sebagai message broker. Kemudian masukan libary yang diperlukan kedalam project.
Setelah itu kita lakukan konfigurasi dari JmsTemplate didalam kelas didalam container :
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean class="org.apache.activemq.ActiveMQConnectionFactory" id="connectionFactory">
<property name="brokerURL" value="tcp://localhost:61616"/>
</bean>
<bean class="org.apache.activemq.command.ActiveMQQueue" id="activeMQQueue">
<constructor-arg value="mail.queue"/>
</bean>
<bean class="org.springframework.jms.core.JmsTemplate" id="jmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="receiveTimeout" value="1000"/>
<property name="defaultDestination" ref="activeMQQueue"/>
</bean>
<bean class="org.kris.service.SenderService" id="senderService">
<property name="jmsTemplate" ref="jmsTemplate"/>
</bean>
<bean class="org.kris.service.ReceiverService" id="receiverService">
<property name="jmsTemplate" ref="jmsTemplate"/>
</bean>
</beans>
Didalam konfigurasi diatas kita melakukan injeksi terhadap kelas ActiveMQConnectionFactory untuk menyediakan koneksi, ActiveMQQueue untuk cara pesan berkomunikasi(P2P), dan tentunya JmsTemplate. Nah, setelah itu kita dapat membuat dua buah form seperti ini :
Nah, kemudian kita buatkan event pada saat tombol tersebut diklik :
private void btnSendUserXActionPerformed(java.awt.event.ActionEvent evt) {
UserYForm form = (UserYForm) FormContainer.getFrame().get("receiver");
userMesage.setContent(txtAreaSendMessage.getText());
try {
sender.sendMessage(userMesage);
sendMessage = ("\n" + userMesage.getUsername() + " "
+ DateFormat.getTimeInstance(DateFormat.MEDIUM).format(new Date()) + " : " + userMesage.getContent());
txtAreaReceiveMessage.append(sendMessage.toString());
} catch (Exception e) {
JOptionPane.showMessageDialog(rootPane, "Tidak Ada Koneksi", "Error", JOptionPane.ERROR_MESSAGE);
}
userMesage = receiver.receiveMessage();
receiveMessage = "\n" + userMesage.getUsername() + " "
+ DateFormat.getTimeInstance(DateFormat.MEDIUM).format(new Date()) + " : " + userMesage.getContent();
form.txtAreaReceiveMessage.append(receiveMessage.toString());
}
Begitu juga dengan form satunya.
Untuk menjalankannya terlebih dahulu kita aktifkan apache ActiveMQ terlebih dahulu :
Ok… ini adalah tampilan dari aplikasi yang sudah jadi …
Nah, mudah bukan……





Nice post, segera dicoba ^_^
Posted by Dicky | March 9, 2010, 7:41 amSedang mencoba tutorial ini. Kemarin sempat coba tapi gagal. Source code krissadewo.wordpress.com di upload di googlecode dengan alamat apa ya???Terima kasih banyak untuk krissadewo.com, oleh-oleh dari solo-nya belum di berikan. Masih ada pada saya.
Posted by Mudzakkir | July 2, 2010, 7:00 amthx bos
Posted by Doez | July 23, 2010, 9:01 am