1 28 29 32 package sampleappli; 33 34 import javax.naming.Context; 35 import javax.naming.InitialContext; 36 import javax.ejb.MessageDrivenBean; 37 import javax.ejb.MessageDrivenContext; 38 import javax.ejb.EJBException; 39 import javax.jms.*; 40 import javax.rmi.PortableRemoteObject; 41 42 49 public class StockHandlerBean implements MessageDrivenBean, MessageListener { 50 51 private transient MessageDrivenContext mdbContext; 52 53 StockHome sh = null; 54 55 QueueConnectionFactory queueConnectionFactory = null; 56 57 QueueConnection queueConnection = null; 58 59 Queue queue = null; 60 61 Context initialContext = null; 62 63 67 70 public StockHandlerBean() { 71 } 72 73 83 84 public void setMessageDrivenContext(MessageDrivenContext ctx) { 85 mdbContext = ctx; 86 } 87 88 96 public void ejbRemove() { 97 } 98 99 102 public void ejbCreate() { 103 try { 104 initialContext = new InitialContext(); 105 sh = (StockHome) PortableRemoteObject.narrow(initialContext.lookup("java:comp/env/ejb/Stock"), 106 StockHome.class); 107 queue = (Queue) initialContext.lookup("java:comp/env/jms/Orders"); 108 queueConnectionFactory = (QueueConnectionFactory) initialContext 109 .lookup("java:comp/env/jms/QueueConnectionFactory"); 110 queueConnection = queueConnectionFactory.createQueueConnection(); 111 } catch (Exception e) { 112 System.err.println("StockHandlerBean ejbCreate : " + e); 113 } 114 } 115 116 127 128 public void onMessage(Message message) { 129 QueueSession session = null; 130 QueueSender qs = null; 131 int code; 132 String pid = null; 133 ; 134 int qty = 0; 135 String cid = null; 136 ; 137 MapMessage msg = (MapMessage) message; 138 Stock stock = null; 139 try { 140 if (message.getJMSRedelivered()) { 141 System.out.println("Ok, that's it!"); 142 return; 143 } 144 } catch (Exception ex) { 145 System.err.println(ex.toString()); 146 } 147 try { 148 pid = msg.getString("ProductId"); 149 qty = msg.getInt("Quantity"); 150 cid = msg.getString("CustomerId"); 151 session = queueConnection.createQueueSession(true, Session.AUTO_ACKNOWLEDGE); 152 qs = session.createSender(queue); 153 stock = sh.findByPrimaryKey(pid); 154 System.out.println("StockHandlerBean findByPrimaryKey(" + pid + ")"); 155 } catch (Exception ex) { 156 System.err.println(ex.toString()); 157 } 158 try { 159 TextMessage tm = session.createTextMessage(); 160 String m = "For CustomerId = " + cid + " ProductId= " + pid + " Quantity= " + qty; 161 tm.setText(m); 162 qs.send(tm); 163 System.out.println("StockHandlerBean message sent: " + m); 164 stock.decreaseQuantity(qty); 165 } catch (Exception ex) { 166 mdbContext.setRollbackOnly(); 168 } finally { 169 if (session != null) { 170 try { 171 session.close(); 172 System.out.println("StockHandlerBean session closed"); 173 } catch (Exception e) { 174 e.printStackTrace(); 175 } 176 } 177 } 178 } 179 180 } | Popular Tags |