activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From JairoV <jairo_vazq...@hotmail.com>
Subject How to communicate two wars in Tomcat
Date Fri, 20 Mar 2009 20:02:20 GMT

Hi,

I am an ActiveMq newbie and I am trying to setup up the following
configuration in tomcat: One embedded broker and two wars. One of the wars
is the producer that posts to a queue and the other war consumes the
message.

My tomcat context.xml has the following entries:

<Resource name="jms/ConnectionFactory" auth="Container"
		type="org.apache.activemq.ActiveMQConnectionFactory"
		description="JMS Connection Factory"
		factory="org.apache.activemq.jndi.JNDIReferenceFactory"
		brokerURL="vm://localhost"
		brokerName="LocalActiveMQBroker"
		userName="activemq" password="activemq"
		clientID="TomcatClientID" />
  <Resource name="jms/segmentQueue" auth="Container"
		type="org.apache.activemq.command.ActiveMQQueue"
		description="JMS Queue"
		factory="org.apache.activemq.jndi.JNDIReferenceFactory"
		physicalName="SEGMENT.QUEUE" />

My activemq jars are in the common\lib directory for tomcat and the broker
is initialized by a servlet listener in the war that consumes the message.
Here is the code:

public void contextInitialized(ServletContextEvent contextEvent) {
        InitialContext init = null;
        ActiveMQConnectionFactory connectionFactory = null;
        ActiveMQQueue queue = null;
        Session session = null;

        String queueName =
PropertiesManager.getPropertyValue(EnumPropertiesNames.JMS_QUEUE_NAME);
        String connectionFactoryName =
PropertiesManager.getPropertyValue(EnumPropertiesNames.JMS_CONN_FACTORY_NAME);

        logger.debug("Initializing JMS queue with values: queue name = " +
            queueName + " and connection factory name = " +
            connectionFactoryName);

        try {
            //Obtain initial context
            init = new InitialContext();
            //Using the context locate the queue
            queue = (org.apache.activemq.command.ActiveMQQueue) init.lookup(
                    "java:comp/env/" + queueName);
            //Using the context locate the connection factory
            connectionFactory = (ActiveMQConnectionFactory) init.lookup(
                    "java:comp/env/" + connectionFactoryName);
        } catch (NamingException e) {
            logger.fatal("Unable to obtain queue/connectionFactory:" +
                e.getMessage(), e);
        }

        logger.debug("Successfully located connection factory and queue: " +
queue + ", " + connectionFactory);
        
        if ((connectionFactory != null) && (queue != null)) {
            try {
                //Obtain connection from connection factory
                connection = connectionFactory.createConnection();
                //Using the connection get a session
                session = connection.createSession(false,
                        Session.AUTO_ACKNOWLEDGE);

                //Create a JMS listener
                MessageConsumer consumer = session.createConsumer(queue);
                consumer.setMessageListener(new JMSMssgListener());
                connection.start();
            } catch (JMSException e) {
                logger.fatal("Unable to create session: " + e.getMessage(),
e);
            }
            
            logger.debug("Successfully created consumer and set message
listener");
        }
    }

I am able to successfully produce a message and the corresponding listener
in the second war retrieves it correctly. The problem is that within the
listener I want to do some processing and I am getting class not found
exceptions. Debugging the issue it seems that the thread for the listener
does not have the classpath for the war (evaluationg
System.getProperty(“java.class.path”) only returns
c:\tomcat\bin\bootstrap.jar).  

What am I missing? Why the listener seems to have the server classpath
instead of the applications? Is there any way to configure this?

Thanks in advance

Jairo


-- 
View this message in context: http://www.nabble.com/How-to-communicate-two-wars-in-Tomcat-tp22627876p22627876.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Mime
View raw message