I have come up with a sample for spring jms with spring integration.It shows how easy is it to configure adaptors for jms using spring integration.
Source Code Download:http://www.4shared.com/dir/18401908/5d14c8a6/springintosgijms.html
I basically have three bundles
Jms Exchange - where jms input/output channels and apapters are declared
Jms-Sender - bundle publishing message into the queue
Jms-Receiver - bundle receiving message from the queue
Jms Exchange
------------------
Publishing channel will put the message into this channel
<!-- channel for jms In message -->
<integration:channel id="jmsInChannel" />
Wrapping the channel using gateway , so that bundle publishing into teh channel is unaware of spring integration apis.
<!-- gateway which puts message into channel -->
<integration:gateway id="jmsSendProxy"
default-request-channel="jmsInChannel" service-interface="com.jms.exchange.IJmsEvent" />
Publishing the gateway as OSGi service for sender to put messages into the cahnnel.
<osgi:service id="jmsSendService" interface="com.jms.exchange.IJmsEvent" ref="jmsSendProxy"></osgi:service>
Jms outbound adaptor which picks the message from channel and puts it into the defined jms queue.
<!-- adapter which puts message from channel to jms queue -->
<jms:outbound-channel-adapter id="jmsin"
destination="sendDestination" channel="jmsInChannel" />
JNDI template required for jms communication on JBoss MQ
<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">jnp://10.1.64.232</prop>
<prop key="java.naming.factory.url.pkgs">org.jnp.interfaces:org.jboss.naming
</prop>
</props>
</property>
</bean>
Connection Factory definition
<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate">
<ref bean="jndiTemplate" />
</property>
<property name="jndiName">
<value>java:ConnectionFactory</value>
</property>
</bean>
Queue details for sending message
<bean id="sendDestination" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate">
<ref bean="jndiTemplate" />
</property>
<property name="jndiName">
<value>queue/RequestQueue</value>
</property>
</bean>
JMS message driven channel adaptor which picks the message as soon as it on the JMS queue and puts it into
the given channel.
<!-- adapter which pulls message from queue into channel -->
<jms:message-driven-channel-adapter
id="jmsout" destination="sendDestination" channel="jmsOutChannel" />
Channel defined for putting the message from queue to channel.
<!-- channel for jms Out message -->
<integration:channel id="jmsOutChannel" />
Publishing the channel as OSGi service for receiver to pick the mssage from channel.
<osgi:service id="jmsListenChannel" ref="jmsOutChannel"
interface="org.springframework.integration.channel.SubscribableChannel" />
Jms Sender
--------------
Osgi referece in to teh gateway for publishing the message into the channel.
<osgi:reference id="jmsSendProxy" interface="com.jms.exchange.IJmsEvent" ></osgi:reference>
JMS Sender using the gateway to put messages into the channel.
<!-- POJO calling gateway -->
<bean id="sender" class="com.jms.sender.Sender">
<property name="jmsSendProxy" ref="jmsSendProxy"></property>
</bean>
public class Sender extends TimerTask{
private IJmsEvent jmsSendProxy;
public void setJmsSendProxy(IJmsEvent jmsSendProxy) {
System.out.println("SETTER CALLED");
this.jmsSendProxy = jmsSendProxy;
}
@Override
public void run() {
System.out.println("TIMER TASK");
jmsSendProxy.send("TEST MESSAGE");
}
}
Spring Time Task which puts the message into the channel periodically.
<bean id="senderTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="period" value="10000" />
<property name="timerTask" ref="sender" />
</bean>
<bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref bean="senderTask" />
</list>
</property>
</bean>
Jms receiver
-----------------
OSGi reference into the channel for listening the messages in the channel.
<osgi:reference id="jmsListenChannel"
interface="org.springframework.integration.channel.SubscribableChannel" />
Service Activator which has a calls a dummy method when a jms message is received.
<!-- service activator for listening to jms messages on channel -->
<integration:service-activator
input-channel="jmsListenChannel" ref="jmsreceiver" method="receive" />
<bean id="jmsreceiver" class="com.jms.receiver.Receiver">
public class Receiver {
public void receive(String arg)
{
System.out.println("Jms response recevived"+arg);
}
}
Source Code Download:http://www.4shared.com/dir/18401908/5d14c8a6/springintosgijms.html
I basically have three bundles
Jms Exchange - where jms input/output channels and apapters are declared
Jms-Sender - bundle publishing message into the queue
Jms-Receiver - bundle receiving message from the queue
Jms Exchange
------------------
Publishing channel will put the message into this channel
<!-- channel for jms In message -->
<integration:channel id="jmsInChannel" />
Wrapping the channel using gateway , so that bundle publishing into teh channel is unaware of spring integration apis.
<!-- gateway which puts message into channel -->
<integration:gateway id="jmsSendProxy"
default-request-channel="jmsInChannel" service-interface="com.jms.exchange.IJmsEvent" />
Publishing the gateway as OSGi service for sender to put messages into the cahnnel.
<osgi:service id="jmsSendService" interface="com.jms.exchange.IJmsEvent" ref="jmsSendProxy"></osgi:service>
Jms outbound adaptor which picks the message from channel and puts it into the defined jms queue.
<!-- adapter which puts message from channel to jms queue -->
<jms:outbound-channel-adapter id="jmsin"
destination="sendDestination" channel="jmsInChannel" />
JNDI template required for jms communication on JBoss MQ
<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">jnp://10.1.64.232</prop>
<prop key="java.naming.factory.url.pkgs">org.jnp.interfaces:org.jboss.naming
</prop>
</props>
</property>
</bean>
Connection Factory definition
<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate">
<ref bean="jndiTemplate" />
</property>
<property name="jndiName">
<value>java:ConnectionFactory</value>
</property>
</bean>
Queue details for sending message
<bean id="sendDestination" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate">
<ref bean="jndiTemplate" />
</property>
<property name="jndiName">
<value>queue/RequestQueue</value>
</property>
</bean>
JMS message driven channel adaptor which picks the message as soon as it on the JMS queue and puts it into
the given channel.
<!-- adapter which pulls message from queue into channel -->
<jms:message-driven-channel-adapter
id="jmsout" destination="sendDestination" channel="jmsOutChannel" />
Channel defined for putting the message from queue to channel.
<!-- channel for jms Out message -->
<integration:channel id="jmsOutChannel" />
Publishing the channel as OSGi service for receiver to pick the mssage from channel.
<osgi:service id="jmsListenChannel" ref="jmsOutChannel"
interface="org.springframework.integration.channel.SubscribableChannel" />
Jms Sender
--------------
Osgi referece in to teh gateway for publishing the message into the channel.
<osgi:reference id="jmsSendProxy" interface="com.jms.exchange.IJmsEvent" ></osgi:reference>
JMS Sender using the gateway to put messages into the channel.
<!-- POJO calling gateway -->
<bean id="sender" class="com.jms.sender.Sender">
<property name="jmsSendProxy" ref="jmsSendProxy"></property>
</bean>
public class Sender extends TimerTask{
private IJmsEvent jmsSendProxy;
public void setJmsSendProxy(IJmsEvent jmsSendProxy) {
System.out.println("SETTER CALLED");
this.jmsSendProxy = jmsSendProxy;
}
@Override
public void run() {
System.out.println("TIMER TASK");
jmsSendProxy.send("TEST MESSAGE");
}
}
Spring Time Task which puts the message into the channel periodically.
<bean id="senderTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="period" value="10000" />
<property name="timerTask" ref="sender" />
</bean>
<bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref bean="senderTask" />
</list>
</property>
</bean>
Jms receiver
-----------------
OSGi reference into the channel for listening the messages in the channel.
<osgi:reference id="jmsListenChannel"
interface="org.springframework.integration.channel.SubscribableChannel" />
Service Activator which has a calls a dummy method when a jms message is received.
<!-- service activator for listening to jms messages on channel -->
<integration:service-activator
input-channel="jmsListenChannel" ref="jmsreceiver" method="receive" />
<bean id="jmsreceiver" class="com.jms.receiver.Receiver">
public class Receiver {
public void receive(String arg)
{
System.out.println("Jms response recevived"+arg);
}
}