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.ConnectionFactory ; 41 import javax.jms.Destination ; 42 import javax.jms.JMSException ; 43 import javax.jms.MapMessage ; 44 import javax.jms.MessageProducer ; 45 import javax.jms.Session ; 46 import javax.naming.InitialContext ; 47 import javax.naming.NamingException ; 48 import javax.rmi.PortableRemoteObject ; 49 import javax.transaction.UserTransaction ; 50 import javax.transaction.NotSupportedException ; 51 import javax.transaction.SystemException ; 52 53 import org.objectweb.jonas.common.Log; 54 import org.objectweb.jonas.jtests.util.Env; 55 import org.objectweb.util.monolog.api.BasicLevel; 56 import org.objectweb.util.monolog.api.Logger; 57 58 63 public class Sender1_2SF implements SessionBean { 64 65 static protected Logger logger = null; 66 SessionContext ejbContext; 67 private transient InitialContext ictx = null; 68 private transient ConnectionFactory cf = null; 69 private transient javax.jms.Connection c = null; 70 private transient MRecordHome ehome = null; 71 private static int count = 1; 72 private static UserTransaction utx = null; 73 77 88 public void setSessionContext(SessionContext ctx) { 89 if (logger == null) 90 logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); 91 logger.log(BasicLevel.DEBUG, ""); 92 ejbContext = ctx; 93 } 94 95 104 public void ejbRemove() { 105 logger.log(BasicLevel.DEBUG, ""); 106 try { 107 c.close(); 108 } catch (Exception e) { 109 logger.log(BasicLevel.ERROR, "Exception on close:" + e); 110 } 111 } 112 113 118 public void ejbCreate() throws CreateException { 119 logger.log(BasicLevel.DEBUG, ""); 120 try { 122 ictx = new InitialContext (); 123 cf = (ConnectionFactory ) ictx.lookup("CF"); 124 } catch (NamingException e) { 125 logger.log(BasicLevel.ERROR, "SenderSF : Cannot lookup Connection Factories: "+e); 126 throw new CreateException ("SenderSF: Cannot lookup Connection Factories"); 127 } 128 129 130 try { 132 133 c = cf.createConnection(); 134 } catch (JMSException e) { 135 logger.log(BasicLevel.ERROR, "SenderSF : Cannot create connections: "+e); 136 throw new CreateException ("SenderSF: Cannot create connections"); 137 } 138 139 String BEAN_HOME = "messageMRecordECHome"; 141 try { 142 ehome = (MRecordHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME), MRecordHome.class); 143 } catch (NamingException e) { 144 logger.log(BasicLevel.ERROR, "SenderSF ejbCreate: Cannot get entity home: "+e); 145 throw new CreateException ("SenderSF: Cannot get entity home"); 146 } 147 } 148 149 153 public void ejbPassivate() { 154 logger.log(BasicLevel.DEBUG, ""); 155 } 156 157 162 public void ejbActivate() { 163 logger.log(BasicLevel.DEBUG, ""); 164 } 165 166 170 173 private String getUUID() { 174 long uuid; 175 synchronized(getClass()) { 176 uuid = System.currentTimeMillis() * 256 + count; 177 count++; 178 } 179 return String.valueOf(uuid); 180 } 181 182 186 194 public void sendOnDestination(Session ss, String dst, int val, int nb) { 195 196 Destination dest = null; 198 try { 199 dest = (Destination ) ictx.lookup(dst); 200 } catch (NamingException e) { 201 throw new EJBException ("sendOnDestination: Cannot lookup "+dest); 202 } 203 204 MessageProducer producer = null; 206 try { 207 producer = ss.createProducer(dest); 208 } catch (JMSException e) { 209 throw new EJBException ("Cannot create MessageProducer: "+e); 210 } 211 212 try { 214 for (int i = 0; i < nb; i++) { 215 MapMessage mess = ss.createMapMessage(); 216 mess.setString("Id", getUUID()); 217 mess.setString("Text",dst); 218 mess.setInt("Value", val); 219 producer.send(mess); 220 } 221 } catch (JMSException e) { 222 throw new EJBException ("Cannot send message: "+e); 223 } 224 225 } 226 227 235 public void sendOnDestinationWithTxBeforeSession(String dst, int val, int nb, boolean commit) 236 throws RemoteException { 237 logger.log(BasicLevel.DEBUG, ""); 238 239 try { 241 utx = ejbContext.getUserTransaction(); 242 } catch (IllegalStateException e) { 243 logger.log(BasicLevel.ERROR, "Can't get UserTransaction"); 244 throw new RemoteException ("Can't get UserTransaction:", e); 245 } 246 247 248 249 try { 251 utx.begin(); 252 } catch (NotSupportedException e) { 253 logger.log(BasicLevel.ERROR, "Can't start Transaction"); 254 throw new RemoteException ("Can't start Transaction:", e); 255 } catch (SystemException e) { 256 logger.log(BasicLevel.ERROR, "Can't start Transaction"); 257 throw new RemoteException ("Can't start Transaction:", e); 258 } 259 260 261 Session ss = null; 265 try { 266 ss = c.createSession(true, 0); 269 } catch (JMSException e) { 270 throw new EJBException ("Cannot create Session: "+e); 271 } 272 sendOnDestination(ss, dst, val, nb); 273 274 275 try { 278 ss.close(); 279 } catch (JMSException e) { 280 throw new EJBException ("Cannot close session: "+e); 281 } 282 283 try { 284 if(commit) { 286 utx.commit(); 287 } else { 288 utx.rollback(); 289 } 290 291 } catch (Exception e) { 292 logger.log(BasicLevel.ERROR, "Can't rollback Transaction"); 293 throw new RemoteException ("Can't rollback Transaction:", e); 294 } 295 } 296 297 305 public void sendOnDestinationWithTxAfterSession(String dst, int val, int nb, boolean commit) 306 throws RemoteException { 307 308 try { 310 utx = ejbContext.getUserTransaction(); 311 } catch (IllegalStateException e) { 312 logger.log(BasicLevel.ERROR, "Can't get UserTransaction"); 313 throw new RemoteException ("Can't get UserTransaction:", e); 314 } 315 316 Session ss = null; 317 try { 318 319 ss = c.createSession(false, 0); 320 } catch (JMSException e) { 321 throw new EJBException ("Cannot create Session: "+e); 322 } 323 324 try { 326 utx.begin(); 327 } catch (NotSupportedException e) { 328 logger.log(BasicLevel.ERROR, "Can't start Transaction"); 329 throw new RemoteException ("Can't start Transaction:", e); 330 } catch (SystemException e) { 331 logger.log(BasicLevel.ERROR, "Can't start Transaction"); 332 throw new RemoteException ("Can't start Transaction:", e); 333 } 334 sendOnDestination(ss, dst, val, nb); 335 try { 338 ss.close(); 339 } catch (JMSException e) { 340 throw new EJBException ("Cannot close session: "+e); 341 } 342 343 try { 344 if(commit) { 346 utx.commit(); 347 } else { 348 utx.rollback(); 349 } 350 351 } catch (Exception e) { 352 logger.log(BasicLevel.ERROR, "Can't rollback Transaction"); 353 throw new RemoteException ("Can't rollback Transaction:", e); 354 } 355 } 356 357 358 359 366 public int check(int val, int nb, int sec) { 367 Collection elist = null; 368 int retval = 0; 369 for (int i = 0; i <= sec; i++) { 370 logger.log(BasicLevel.DEBUG, "sec : " + i + "/" + sec); 371 try { 372 elist = ehome.findByValue(val); 373 retval = elist.size(); 374 if (retval >= nb) { 375 Iterator it = elist.iterator(); 377 while (it.hasNext()) { 378 MRecord ent = (MRecord) PortableRemoteObject.narrow(it.next(), MRecord.class); 379 try { 380 ent.remove(); 381 } catch (Exception e) { 382 throw new EJBException ("Error on remove"); 383 } 384 } 385 return retval; 386 } 387 } catch (FinderException e) { 388 } catch (RemoteException e) { 389 return retval; 390 } 391 try { 392 Thread.sleep(1000); 393 } catch (InterruptedException e) { 394 } 395 } 396 return retval; 397 } 398 399 402 public void clean(int val) { 403 logger.log(BasicLevel.DEBUG, ""); 404 Collection elist = null; 405 try { 406 elist = ehome.findByValue(val); 407 } catch (FinderException e) { 408 return; 409 } catch (Exception e) { 410 throw new EJBException ("Error on find"); 411 } 412 Iterator it = elist.iterator(); 413 while (it.hasNext()) { 414 MRecord ent = (MRecord) PortableRemoteObject.narrow(it.next(), MRecord.class); 415 try { 416 ent.remove(); 417 } catch (Exception e) { 418 throw new EJBException ("Error on remove"); 419 } 420 } 421 } 422 423 } 424 | Popular Tags |