1 16 19 24 package org.mortbay.j2ee; 25 26 import java.io.IOException ; 27 import javax.naming.InitialContext ; 28 import javax.transaction.Status ; 29 import javax.transaction.Transaction ; 30 import javax.transaction.TransactionManager ; 31 32 import org.jfox.ioc.logger.Logger; 33 import org.mortbay.http.HttpRequest; 34 import org.mortbay.http.HttpResponse; 35 import org.mortbay.jetty.servlet.WebApplicationHandler; 36 37 public abstract class J2EEWebApplicationHandler extends WebApplicationHandler 38 { 39 protected static final Logger _log=Logger.getLogger(J2EEWebApplicationHandler.class); 40 41 protected javax.naming.Context _ctx; 42 protected TransactionManager _tm; 43 44 protected void doStart() 45 throws Exception 46 { 47 super.doStart(); 48 _ctx=new InitialContext (); 49 _tm=(TransactionManager )_ctx.lookup("java:/TransactionManager"); 50 } 51 52 protected void doStop() 53 throws Exception 54 { 55 super.doStop(); 56 _ctx=null; 57 _tm=null; 58 } 59 60 public void handle(String pathInContext, 61 String pathParams, 62 HttpRequest httpRequest, 63 HttpResponse httpResponse) 64 throws IOException 65 { 66 try 68 { 69 super.handle(pathInContext, pathParams, httpRequest, httpResponse); 70 } 71 finally 72 { 73 disassociateTransaction(); 74 disassociateSecurity(); 75 } 76 } 78 79 protected void disassociateTransaction() 80 { 81 int status=Status.STATUS_NO_TRANSACTION; 82 try 83 { 84 status=_tm.getStatus(); 85 } 86 catch (Exception e) 87 { 88 _log.error("could not get status of current Transaction", e); 89 } 90 91 103 if (!(status==Status.STATUS_COMMITTED || 104 status==Status.STATUS_NO_TRANSACTION || 105 status==Status.STATUS_ROLLEDBACK)) 106 { 107 try 110 { 111 _log.warn("UserTransactions MUST be completed by end of service() method"); 112 _log.warn("Rolling back incomplete transaction on current thread"); 113 _tm.rollback(); 114 } 115 catch (Exception e) 116 { 117 _log.error("could not rollback incomplete transaction", e); 118 } 119 } 120 121 Transaction garbage=null; 122 try 123 { 124 garbage=_tm.suspend(); 125 } 126 catch (Exception e) 127 { 128 _log.error("could not disassociate transaction context from current thread", e); 129 } 130 131 garbage=null; 132 } 133 134 protected abstract void disassociateSecurity(); 135 } 136 | Popular Tags |