16 Oct, 2018
Categories: Spring JMS
Java Libraries
Use JAR files which are listed below:
activemq-core-5.7.0.jar
activemq-spring-5.12.0.jar
antlr-2.7.7.jar
aopalliance-1.0.jar
aspectjrt-1.8.9.jar
aspectjweaver-1.8.9.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
com.springsource.org.apache.log4j-1.2.15.jar
commons-dbcp2-2.1.1.jar
commons-logging-1.1.3.jar
commons-pool2-2.4.2.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-4.0.2.Final.jar
hibernate-core-4.2.5.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
javassist-3.15.0-GA.jar
javax.jms-api-2.0.1.jar
jboss-logging-3.1.0.GA.jar
jboss-transaction-api_1.1_spec-1.0.1.Final.jar
jmxtools-1.2.1.jar
mysql-connector-java-5.1.36.jar
spring-aop-4.2.0.RELEASE.jar
spring-aspects-4.3.3.RELEASE.jar
spring-beans-4.2.0.RELEASE.jar
spring-context-4.2.0.RELEASE.jar
spring-context-support-5.0.0.RELEASE.jar
spring-core-4.2.0.RELEASE.jar
spring-expression-4.2.0.RELEASE.jar
spring-jdbc-4.2.0.RELEASE.jar
spring-jms-4.2.0.RELEASE.jar
spring-messaging-5.0.3.RELEASE.jar
spring-orm-4.2.0.RELEASE.jar
spring-oxm-4.2.0.RELEASE.jar
spring-tx-4.2.0.RELEASE.jar
Create Consumer Project
Create Java Project in Eclipse. Right click the project select Build Path\Configure Build Path menu. In Libraries tab, select all jar files above to the project. Besides, we need add appserv-rt library in glassfish4\glassfish\lib folder from GlassFish Server as photo below:
Consumer Project Structure
Create Message Listener class
This class contains methods to receive messages from destination
package demo.spring_jms;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
public class MapMessageListener implements MessageListener {
@Override
public void onMessage(Message message) {
try {
if (message instanceof MapMessage) {
MapMessage mapMessage = (MapMessage) message;
System.out.println("Student Info");
System.out.println("Id: " + mapMessage.getString("id"));
System.out.println("Full Name: " + mapMessage.getString("fullName"));
System.out.println("Age: " + mapMessage.getInt("age"));
System.out.println("Status: " + mapMessage.getBoolean("status"));
System.out.println("Score: " + mapMessage.getDouble("score"));
}
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
}
Spring JMS Configuration File
The Spring configuration shows a context:component-scan that picks up the JMS listener.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jms="http://www.springframework.org/schema/jms"
xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms.xsd">
<context:component-scan base-package="demo.*"></context:component-scan>
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">com.sun.enterprise.naming.SerialInitContextFactory
</prop>
<prop key="java.naming.factory.url.pkgs">com.sun.enterprise.naming</prop>
<prop key="java.naming.factory.state">com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl
</prop>
<prop key="org.omg.CORBA.ORBInitialHost">localhost</prop>
<prop key="org.omg.CORBA.ORBInitialPort">3700</prop>
</props>
</property>
</bean>
<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate" ref="jndiTemplate" />
<property name="jndiName" value="topic_connection_factory"></property>
</bean>
<bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate" ref="jndiTemplate" />
<property name="jndiName" value="spring_jms_topic_destination"></property>
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"></property>
<property name="defaultDestination" ref="destination"></property>
</bean>
<bean id="mapMessageListener" class="demo.spring_jms.MapMessageListener"></bean>
<jms:listener-container connection-factory="connectionFactory"
acknowledge="auto" destination-type="topic">
<jms:listener destination="spring_jms_topic_destination"
ref="mapMessageListener" method="onMessage" />
</jms:listener-container>
</beans>
Run Application
package demo.spring_jms;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
try {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
}
Output
Student Info
Id: st01
Full Name: ABC
Age: 20
Status: true
Score: 7.8
Tags
jmsjms in javajms in springjms in spring frameworkMessage Topic in Spring JMSReceive File in jmsReceive File in spring jmsReceive Map Messages with Message QueueReceive Map Messages with Message Topic in Spring JMSsend file in jmssend file in spring jmsSend Map Messages with Message Queue in Spring JMSSend Map Messages with Message Topic in Spring JMSspring frameworkspring jms