package org.jboss.test.foedeployer.ejb.message;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.TextMessage;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueConnection;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.QueueSender;
import javax.jms.Queue;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.log4j.Category;
public class MessageTraderBean
implements MessageDrivenBean, MessageListener
{
private static final String QUEUE_CONNECTION_FACTORY = "ConnectionFactory";
private static final String QUEUE = "queue/testQueue";
protected Category log;
private MessageDrivenContext mdc;
private transient QueueConnection queueConnection;
private transient Queue queue;
public void setMessageDrivenContext(MessageDrivenContext ctx)
{
mdc = ctx;
}
public void onMessage(Message msg)
{
getLog().debug("received message of type: " + msg.getClass().getName());
if( !( msg instanceof ObjectMessage ) )
getLog().error( "message isn't of type ObjectMessage" );
try
{
QuoteMessage qm = (QuoteMessage) ( (ObjectMessage)msg ).getObject();
getLog().debug( "received new quote: " + qm.getQuote() );
send( msg );
}
catch(Exception ex)
{
getLog().error("ERROR: ", ex);
}
}
public void ejbCreate() { }
public void ejbRemove()
{
if( queueConnection != null )
{
getLog().debug( "closing connection" );
try
{
queueConnection.close();
}
catch( JMSException jmse )
{
getLog().debug( "Exception while closing queue connection: ", jmse );
}
}
else
{
getLog().debug( "queue connection is null" );
}
}
private void send( Message msg )
throws Exception
{
QueueSession queueSession = getQueueSession();
queue = getQueue();
getLog().debug( "creating sender" );
QueueSender queueSender = queueSession.createSender( queue );
ObjectMessage objMsg = (ObjectMessage)msg;
QuoteMessage qm = (QuoteMessage)objMsg.getObject();
getLog().debug( "resending the message: " + qm.getQuote() );
queueSender.send( msg );
}
private QueueSession getQueueSession()
throws Exception
{
if(queueConnection == null)
{
getLog().debug("looking for queue connection factory: "
+ QUEUE_CONNECTION_FACTORY );
InitialContext ctx = new InitialContext();
QueueConnectionFactory queueFactory =
(QueueConnectionFactory) ctx.lookup(QUEUE_CONNECTION_FACTORY);
queueConnection = queueFactory.createQueueConnection();
}
getLog().debug( "creating queue connection" );
return queueConnection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
}
private Queue getQueue()
throws Exception
{
if(queue == null)
{
getLog().debug( "looking for queue: " + QUEUE );
InitialContext ctx = new InitialContext();
queue = (Queue) ctx.lookup( QUEUE );
}
return queue;
}
private Category getLog()
{
if( log != null ) return log;
log = Category.getInstance( this.getClass() );
return log;
}
}