Below is a sample program on Tomcat that uses ActiveMQ JMS example code.  The
code runs and per my messages sends a message and is listening, but doesn't
receive the message. I would appreciate if someone could review and let me
know what I've done wrong in or outside of this code or if I need to add
something additionally.

*web.xml*
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
         xmlns="http://java.sun.com/xml/ns/javaee";
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd";
         id="WebApp_ID"
         version="3.0">
         
   <listener>
     
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>
   <listener>
      <listener-class>JMSReceiveListener</listener-class>
   </listener>
   <listener>
      <listener-class>JMSSendListener</listener-class>
   </listener>
</web-app>

*applicationContext.xml*
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans";
       xmlns:amq="http://activemq.apache.org/schema/core";
       xmlns:context="http://www.springframework.org/schema/context";
       xmlns:jee="http://www.springframework.org/schema/jee";
       xmlns:jms="http://www.springframework.org/schema/jms";
       xmlns:tx="http://www.springframework.org/schema/tx"; 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
       xsi:schemaLocation="http://activemq.apache.org/schema/core
                          
http://activemq.apache.org/schema/core/activemq-core-5.3.0.xsd
                           http://www.springframework.org/schema/beans
                          
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                           http://www.springframework.org/schema/context
                          
http://www.springframework.org/schema/context/spring-context-3.0.xsd
                           http://www.springframework.org/schema/jee
                          
http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
                           http://www.springframework.org/schema/jms
                          
http://www.springframework.org/schema/jms/spring-jms-3.0.xsd
                           http://www.springframework.org/schema/tx
                          
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"; >    
   
      
      <context:component-scan base-package=""/>
      <context:annotation-config/>
   
   
   <amq:broker useJmx="false"
               persistent="false">
      <amq:transportConnectors>
         <amq:transportConnector uri="tcp://localhost:0" />
      </amq:transportConnectors>
   </amq:broker>
   
   
   <amq:topic id="startTopic"
              physicalName="START" />
              
   
   <amq:connectionFactory id="jmsFactory"    
                          brokerURL="vm://localhost" />
                          
   
   <bean id="producerJMSTemplate"
         class="org.springframework.jms.core.JmsTemplate">
      <property name="connectionFactory">
         
         <bean
class="org.springframework.jms.connection.SingleConnectionFactory">
            <property name="targetConnectionFactory">
               <ref local="jmsFactory" />
            </property>
         </bean>
      </property>
   </bean>

   <bean id="consumerJMSTemplate"
         class="org.springframework.jms.core.JmsTemplate">
      <property name="connectionFactory" ref="jmsFactory" />
   </bean>
   
   
   <bean id="producer"
         class="TestSender">
      <property name="jMSTemplate">
         <ref bean="producerJMSTemplate"></ref>
      </property>
      <property name="topic">
         <ref bean="startTopic" />
      </property>
   </bean>
   
   
   <bean id="consumer"
         class="TestReceiver">
      <property name="jMSTemplate" ref="consumerJMSTemplate" />
      <property name="topic" ref="startTopic" />
   </bean>
</beans>

*TestSender.java*
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import javax.jms.Topic;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Component;

@Component
public class TestSender
{
   @Autowired(required=true)
   @Qualifier("producerJMSTemplate")
   private JmsTemplate jmsTemplate;
   
   @Autowired(required=true)
   @Qualifier("startTopic")
   private Topic       topic;

   public void produce(final String responseMsg_)
   {
      try
      {
         System.out.println("TestSender:sending message on topic ==> " +
topic.getTopicName());
      }
      catch(JMSException e)
      {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      
      this.jmsTemplate.send(this.topic,
                            new MessageCreator()
         {
            public Message createMessage(Session session_) throws
JMSException
            {
               ObjectMessage mm = session_.createObjectMessage();
               
               mm.setIntProperty("JobId", 12);
               mm.setStringProperty("Response", responseMsg_);
               
               System.out.println("TestSender:message created ==> " + mm);
               return(mm);
            }
         });
   }

   public void setJMSTemplate(JmsTemplate jmsTemplate_)
   {
      System.out.println("TestSender:Connection factory set");
      this.jmsTemplate = jmsTemplate_;
   }
   
   public void setTopic(Topic topic_)
   {
      System.out.println("TestSender:Topic set");
      this.topic = topic_;
   }
}

*TestReceiver.java*
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import javax.jms.Topic;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Component;

@Component
public class TestReceiver implements MessageListener
{
   @Autowired(required=true)
   @Qualifier("consumerJMSTemplate")
   private JmsTemplate jmsTemplate;
   
   @Autowired(required=true)
   @Qualifier("startTopic")
   private Topic       topic;

   public void setJMSTemplate(JmsTemplate jmsTemplate_)
   {
      System.out.println("TestReceiver:Connection factory set");
      this.jmsTemplate = jmsTemplate_;
   }
   
   public void setTopic(Topic topic_)
   {
      System.out.println("TestReceiver:Topic set");
      this.topic = topic_;
   }

   public void onMessage(Message message_)
   {
      ObjectMessage oMessage = (ObjectMessage)message_;
      
      try
      {
         System.out.println("StartTopicHandler received message=" +
oMessage.getObject().toString());
      }
      catch(JMSException e)
      {
         e.printStackTrace();
      }
   }
}

*JMSSendListener.java*
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class JMSSendListener implements ServletContextListener, Runnable
{
   public void contextDestroyed(ServletContextEvent arg0)
   {
   }

   public void contextInitialized(ServletContextEvent event_)
   {
      new Thread(this).start();
   }

   public void run()
   {
      BeanFactory beanFactory = new
FileSystemXmlApplicationContext("/WEB-INF/applicationContext.xml").getBeanFactory();
      
      TestSender testSender = (TestSender)beanFactory.getBean("producer");
      
      System.out.println("Got bean, testSender=" + testSender + " is
sending");

      while(true)
      {
         testSender.produce("This is the response message from the sender");

         try
         {
            Thread.sleep(1000);
         }
         catch(InterruptedException e)
         {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
      }
   }
}

*JMSReceiveListener.java*
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class FDSListener implements ServletContextListener, Runnable
{
   private TestReceiver testReceiver;

   public void contextDestroyed(ServletContextEvent arg0)
   {
   }

   public void contextInitialized(ServletContextEvent event_)
   {
      new Thread(this).start();
   }

   public void run()
   {
      BeanFactory beanFactory = new
FileSystemXmlApplicationContext("/WEB-INF/applicationContext.xml").getBeanFactory();
      
      testReceiver = (TestReceiver)beanFactory.getBean("consumer");
      
      System.out.println("Got bean, testReceiver=" + testReceiver+ " is
listening");
      
      while(true)
      {
         try
         {
            Thread.sleep(500);
         }
         catch(Exception e)
         {
            e.printStackTrace();
         }
      }
   }
}

--
View this message in context: 
http://activemq.2283324.n4.nabble.com/JMS-Communications-tp3688040p3688040.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to