1 25 26 29 package org.objectweb.jonas.jtests.beans.message; 30 31 import java.rmi.RemoteException ; 32 import java.util.Collection ; 33 import java.util.Iterator ; 34 35 import javax.ejb.CreateException ; 36 import javax.ejb.EJBException ; 37 import javax.ejb.FinderException ; 38 import javax.ejb.SessionBean ; 39 import javax.ejb.SessionContext ; 40 import javax.jms.JMSException ; 41 import javax.jms.MapMessage ; 42 import javax.jms.Queue ; 43 import javax.jms.QueueConnection ; 44 import javax.jms.QueueConnectionFactory ; 45 import javax.jms.QueueSender ; 46 import javax.jms.QueueSession ; 47 import javax.jms.Topic ; 48 import javax.jms.TopicConnection ; 49 import javax.jms.TopicConnectionFactory ; 50 import javax.jms.TopicPublisher ; 51 import javax.jms.TopicSession ; 52 import javax.naming.InitialContext ; 53 import javax.naming.NamingException ; 54 import javax.rmi.PortableRemoteObject ; 55 56 import org.objectweb.jonas.common.Log; 57 import org.objectweb.jonas.jtests.util.Env; 58 import org.objectweb.util.monolog.api.BasicLevel; 59 import org.objectweb.util.monolog.api.Logger; 60 61 64 public class SenderSF implements SessionBean { 65 66 static protected Logger logger = null; 67 SessionContext ejbContext; 68 private transient InitialContext ictx = null; 69 private transient TopicConnectionFactory tcf = null; 70 private transient TopicConnection tc = null; 71 private transient QueueConnectionFactory qcf = null; 72 private transient QueueConnection qc = null; 73 private transient MRecordHome ehome = null; 74 private static int count = 1; 75 76 80 91 public void setSessionContext(SessionContext ctx) { 92 if (logger == null) 93 logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); 94 logger.log(BasicLevel.DEBUG, ""); 95 ejbContext = ctx; 96 } 97 98 107 public void ejbRemove() { 108 logger.log(BasicLevel.DEBUG, ""); 109 try { 110 tc.close(); 111 qc.close(); 112 } catch (Exception e) { 113 logger.log(BasicLevel.ERROR, "Exception on close:" + e); 114 } 115 } 116 117 122 public void ejbCreate() throws CreateException { 123 logger.log(BasicLevel.DEBUG, ""); 124 try { 126 ictx = new InitialContext (); 127 tcf = (TopicConnectionFactory ) ictx.lookup("TCF"); 128 qcf = (QueueConnectionFactory ) ictx.lookup("QCF"); 129 } catch (NamingException e) { 130 logger.log(BasicLevel.ERROR, "SenderSF : Cannot lookup Connection Factories: "+e); 131 throw new CreateException ("SenderSF: Cannot lookup Connection Factories"); 132 } 133 134 try { 136 qc = qcf.createQueueConnection(); 137 tc = tcf.createTopicConnection(); 138 } catch (JMSException e) { 139 logger.log(BasicLevel.ERROR, "SenderSF : Cannot create connections: "+e); 140 throw new CreateException ("SenderSF: Cannot create connections"); 141 } 142 143 String BEAN_HOME = "messageMRecordECHome"; 145 try { 146 ehome = (MRecordHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME), MRecordHome.class); 147 } catch (NamingException e) { 148 logger.log(BasicLevel.ERROR, "SenderSF ejbCreate: Cannot get entity home: "+e); 149 throw new CreateException ("SenderSF: Cannot get entity home"); 150 } 151 } 152 153 157 public void ejbPassivate() { 158 logger.log(BasicLevel.DEBUG, ""); 159 } 160 161 166 public void ejbActivate() { 167 logger.log(BasicLevel.DEBUG, ""); 168 } 169 170 174 177 private String getUUID() { 178 long uuid; 179 synchronized(getClass()) { 180 uuid = System.currentTimeMillis() * 256 + count; 181 count++; 182 } 183 return String.valueOf(uuid); 184 } 185 186 190 196 public void sendOnTopic(String dest, int val, int nb) { 197 logger.log(BasicLevel.DEBUG, ""); 198 Topic topic = null; 200 try { 201 topic = (Topic ) ictx.lookup(dest); 202 } catch (NamingException e) { 203 throw new EJBException ("sendOnTopic: Cannot lookup "+dest); 204 } 205 206 TopicSession ss = null; 210 try { 211 ss = tc.createTopicSession(true, 0); 214 } catch (JMSException e) { 215 throw new EJBException ("Cannot create Session: "+e); 216 } 217 218 TopicPublisher publisher = null; 220 try { 221 publisher = ss.createPublisher(topic); 222 } catch (JMSException e) { 223 throw new EJBException ("Cannot create TopicPublisher: "+e); 224 } 225 226 try { 228 for (int i = 0; i < nb; i++) { 229 MapMessage mess = ss.createMapMessage(); 230 mess.setString("Id", getUUID()); 231 mess.setString("Text", dest); 232 mess.setInt("Value", val); 233 publisher.publish(mess); 234 } 235 } catch (JMSException e) { 236 throw new EJBException ("Cannot send message: "+e); 237 } 238 239 try { 242 ss.close(); 243 } catch (JMSException e) { 244 throw new EJBException ("Cannot close session: "+e); 245 } 246 } 247 248 254 public void sendOnTopicTx(String dest, int val, int nb) { 255 sendOnTopic(dest, val, nb); 256 } 257 258 264 public void sendOnQueue(String dest, int val, int nb) { 265 logger.log(BasicLevel.DEBUG, ""); 266 Queue queue = null; 268 try { 269 queue = (Queue ) ictx.lookup(dest); 270 } catch (NamingException e) { 271 throw new EJBException ("sendOnQueue: Cannot lookup "+dest); 272 } 273 274 QueueSession ss = null; 278 try { 279 ss = qc.createQueueSession(true, 0); 282 } catch (JMSException e) { 283 throw new EJBException ("Cannot create Session: "+e); 284 } 285 286 QueueSender sender = null; 288 try { 289 sender = ss.createSender(queue); 290 } catch (JMSException e) { 291 throw new EJBException ("Cannot create QueueSender: "+e); 292 } 293 294 try { 296 for (int i = 0; i < nb; i++) { 297 MapMessage mess = ss.createMapMessage(); 298 mess.setString("Id", getUUID()); 299 mess.setString("Text", dest); 300 mess.setInt("Value", val); 301 sender.send(mess); 302 } 303 } catch (JMSException e) { 304 throw new EJBException ("Cannot send message: "+e); 305 } 306 307 try { 310 ss.close(); 311 } catch (JMSException e) { 312 throw new EJBException ("Cannot close session: "+e); 313 } 314 } 315 316 322 public void sendOnQueueTx(String dest, int val, int nb) { 323 sendOnQueue(dest, val, nb); 324 } 325 326 333 public int check(int val, int nb, int sec) { 334 Collection elist = null; 335 int retval = 0; 336 for (int i = 0; i <= sec; i++) { 337 logger.log(BasicLevel.DEBUG, "sec : " + i + "/" + sec); 338 try { 339 elist = ehome.findByValue(val); 340 retval = elist.size(); 341 if (retval >= nb) { 342 Iterator it = elist.iterator(); 344 while (it.hasNext()) { 345 MRecord ent = (MRecord) PortableRemoteObject.narrow(it.next(), MRecord.class); 346 try { 347 ent.remove(); 348 } catch (Exception e) { 349 throw new EJBException ("Error on remove"); 350 } 351 } 352 return retval; 353 } 354 } catch (FinderException e) { 355 } catch (RemoteException e) { 356 return retval; 357 } 358 try { 359 Thread.sleep(1000); 360 } catch (InterruptedException e) { 361 } 362 } 363 return retval; 364 } 365 366 369 public void clean(int val) { 370 logger.log(BasicLevel.DEBUG, ""); 371 Collection elist = null; 372 try { 373 elist = ehome.findByValue(val); 374 } catch (FinderException e) { 375 return; 376 } catch (Exception e) { 377 throw new EJBException ("Error on find"); 378 } 379 Iterator it = elist.iterator(); 380 while (it.hasNext()) { 381 MRecord ent = (MRecord) PortableRemoteObject.narrow(it.next(), MRecord.class); 382 try { 383 ent.remove(); 384 } catch (Exception e) { 385 throw new EJBException ("Error on remove"); 386 } 387 } 388 } 389 390 } 391 | Popular Tags |