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.