1 7 8 package org.jboss.test.foedeployer.ejb.message; 9 10 import java.rmi.RemoteException ; 11 12 import javax.ejb.CreateException ; 13 import javax.ejb.MessageDrivenBean ; 14 import javax.ejb.MessageDrivenContext ; 15 16 import javax.jms.JMSException ; 17 import javax.jms.Message ; 18 import javax.jms.MessageListener ; 19 import javax.jms.ObjectMessage ; 20 import javax.jms.TextMessage ; 21 import javax.jms.QueueConnectionFactory ; 22 import javax.jms.QueueConnection ; 23 import javax.jms.QueueSession ; 24 import javax.jms.Session ; 25 import javax.jms.QueueSender ; 26 import javax.jms.Queue ; 27 28 import javax.naming.InitialContext ; 29 import javax.naming.NamingException ; 30 31 import org.apache.log4j.Category; 32 33 50 public class MessageTraderBean 51 implements MessageDrivenBean , MessageListener 52 { 53 private static final String QUEUE_CONNECTION_FACTORY = "ConnectionFactory"; 55 private static final String QUEUE = "queue/testQueue"; 56 57 protected Category log; 59 private MessageDrivenContext mdc; 60 private transient QueueConnection queueConnection; 61 private transient Queue queue; 62 63 69 public void setMessageDrivenContext(MessageDrivenContext ctx) 70 { 71 mdc = ctx; 72 } 73 74 78 public void onMessage(Message msg) 79 { 80 getLog().debug("received message of type: " + msg.getClass().getName()); 81 82 if( !( msg instanceof ObjectMessage ) ) 83 getLog().error( "message isn't of type ObjectMessage" ); 84 85 try 86 { 87 QuoteMessage qm = (QuoteMessage) ( (ObjectMessage )msg ).getObject(); 88 89 getLog().debug( "received new quote: " + qm.getQuote() ); 90 91 send( msg ); 92 } 93 catch(Exception ex) 94 { 95 getLog().error("ERROR: ", ex); 96 } 97 } 98 99 public void ejbCreate() { } 100 101 public void ejbRemove() 102 { 103 if( queueConnection != null ) 104 { 105 getLog().debug( "closing connection" ); 106 try 107 { 108 queueConnection.close(); 109 } 110 catch( JMSException jmse ) 111 { 112 getLog().debug( "Exception while closing queue connection: ", jmse ); 113 } 114 } 115 else 116 { 117 getLog().debug( "queue connection is null" ); 119 } 120 } 121 122 private void send( Message msg ) 124 throws Exception 125 { 126 QueueSession queueSession = getQueueSession(); 127 queue = getQueue(); 128 129 getLog().debug( "creating sender" ); 130 QueueSender queueSender = queueSession.createSender( queue ); 131 132 ObjectMessage objMsg = (ObjectMessage )msg; 133 QuoteMessage qm = (QuoteMessage)objMsg.getObject(); 134 getLog().debug( "resending the message: " + qm.getQuote() ); 135 queueSender.send( msg ); 136 } 137 138 private QueueSession getQueueSession() 139 throws Exception 140 { 141 if(queueConnection == null) 142 { 143 getLog().debug("looking for queue connection factory: " 144 + QUEUE_CONNECTION_FACTORY ); 145 146 InitialContext ctx = new InitialContext (); 147 QueueConnectionFactory queueFactory = 148 (QueueConnectionFactory ) ctx.lookup(QUEUE_CONNECTION_FACTORY); 149 queueConnection = queueFactory.createQueueConnection(); 150 } 151 152 getLog().debug( "creating queue connection" ); 153 return queueConnection.createQueueSession(false, 154 Session.AUTO_ACKNOWLEDGE); 155 } 156 157 private Queue getQueue() 158 throws Exception 159 { 160 if(queue == null) 161 { 162 getLog().debug( "looking for queue: " + QUEUE ); 163 164 InitialContext ctx = new InitialContext (); 165 queue = (Queue ) ctx.lookup( QUEUE ); 166 } 167 168 return queue; 169 } 170 171 private Category getLog() 172 { 173 if( log != null ) return log; 174 log = Category.getInstance( this.getClass() ); 175 return log; 176 } 177 } 178 | Popular Tags |