jms bc seems do not receive a message - simple case
czystaf Nov 24, 2011 3:16 PMHello, I was training with setting up a simple ESB based application (example from a book) and I stucked with a problem. The application should work like this:
1) a junit test connects to the broker and sends a simple message
2) jms bc receives that message and push it to the bean se
3) bean se outputs on the screen information that it received the message (I guess I should see it in servicemix.log)
But there is some problem. As I run the JUnit I see that the message is send to the localhost:61616, but I have no idea why jms does not collect it..
My code below:
On ESB side I have to components: jms bc & bean se
xbean for jms bc:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:jms="http://servicemix.apache.org/jms/1.0"
xmlns:esb="http://esbinaction.com/examples"
xmlns:amqpool="http://jencks.org/amqpool/2.0">
<amqpool:pool id="connectionFactory" url="tcp://localhost:61616" maxConnections="8" />
<jms:consumer service="esb:simpleConsumer"
endpoint="simpleEndpoint"
targetService="esb:beanLoggingService"
destinationName="simple.input"
connectionFactory="#connectionFactory"/>
</beans>
xbean for bean se:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:bean="http://servicemix.apache.org/bean/1.0"
xmlns:esb="http://esbinaction.com/examples">
<bean:endpoint service="esb:beanLoggingService"
+ endpoint="loggingEndpoint"+
+ bean="#SimLogBean"/>+
<bean id="SimLogBean" class="esb.toos.logging.SimpleLoggingBean"/>
</beans>
SimpleLoggingBean class:
package esb.toos.logging;
import org.apache.log4j.Logger;
import org.apache.servicemix.MessageExchangeListener;
import org.apache.servicemix.components.util.ComponentSupport;
import org.apache.servicemix.jbi.jaxp.SourceTransformer;
import javax.annotation.Resource;
import javax.jbi.messaging.*;
import javax.xml.transform.TransformerException;
public class SimpleLoggingBean extends ComponentSupport implements MessageExchangeListener {
private final static Logger LOGGER = Logger.getLogger(SimpleLoggingBean.class);
private SourceTransformer sourceTransformer = new SourceTransformer();
@Resource
private DeliveryChannel channel;
public void onMessageExchange(MessageExchange messageExchange) throws MessagingException {
NormalizedMessage message = getInMessage(messageExchange);
try {
+LOGGER.info("Received payload: " + sourceTransformer.toString(message.getContent()));+
} catch(TransformerException e) {
LOGGER.error("Error while reading payload ", e);
}
messageExchange.setStatus(ExchangeStatus.DONE);
channel.send(messageExchange);
}
}
Outside ESB there is a simple JUnit test
Junit Test:
package com.toos.test;
import org.apache.activemq.ActiveMQConnection;
import org.junit.Test;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
public class TestSolution {
@Test
public void helloComponent() throws Exception {
ActiveMQConnection connection = ActiveMQConnection.makeConnection("tcp://localhost:61616");
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("simple.input");
TextMessage simpleMessage = session.createTextMessage();
simpleMessage.setText("");
MessageProducer producer = session.createProducer(destination);
producer.send(simpleMessage);
Thread.sleep(1000);
}
}
I just have no more ideas how to fix it. Any help would be very welcome.
If you need any more information I will provide it to you asap
Thanks,
Tomek
Edited by: czystaf on Nov 24, 2011 8:14 PM