GenericTransactionalController.java
00001 package edu.virtualschool.jwaa.dbms;
00002
00003 import java.io.IOException;
00004
00005 import javax.servlet.ServletException;
00006 import javax.servlet.http.HttpServletRequest;
00007 import javax.servlet.http.HttpServletResponse;
00008
00009 import org.apache.log4j.Logger;
00010
00011 import edu.virtualschool.jwaa.Fault;
00012 import edu.virtualschool.jwaa.GenericPage;
00013 import edu.virtualschool.jwaa.GenericServlet;
00014 import edu.virtualschool.jwaa.IgnorableFault;
00015 import edu.virtualschool.jwaa.MetaPage;
00016
00017 public abstract class GenericTransactionalController
00018 extends GenericPage
00019 {
00020 public DB dbms;
00021
00022 final static Logger logger = Logger.getLogger(GenericTransactionalController.class.getName());
00023
00024 public GenericTransactionalController() {}
00025
00026 public void init(
00027 MetaPage meta,
00028 GenericServlet servlet,
00029 HttpServletRequest req,
00030 HttpServletResponse rsp
00031 ) throws IOException, ServletException
00032 {
00033 super.init(meta, servlet, req, rsp);
00034 try
00035 {
00036 this.dbms = ((GenericTransactionalServlet)this.servlet).getDB();
00037 }
00038 catch (Fault e)
00039 {
00040 throw new ServletException("Fault allocating DB for page "+this, e);
00041 }
00042 }
00043 public final void run() throws Fault
00044 {
00045 try
00046 {
00047 logger.debug(this+" transaction start");
00048 runTransaction();
00049 logger.debug(this+" transaction commit: return");
00050 dbms.commit();
00051 }
00052 catch (IgnorableFault e)
00053 {
00054 logger.debug(this+" transaction commit: ignorable fault");
00055 dbms.commit();
00056 throw e;
00057 }
00058 catch (Fault e)
00059 {
00060 logger.error(this+" transaction roll back: fault "+e, e);
00061 dbms.rollback();
00062 throw e;
00063 }
00064 catch (Throwable e)
00065 {
00066 logger.error(this+" transaction roll back: throwable "+e, e);
00067 dbms.rollback();
00068 throw new Fault(e, e);
00069 }
00070 finally
00071 {
00072 dbms.close();
00073 }
00074 }
00075 public void redirect(MetaPage meta) throws Fault
00076 {
00077 try
00078 {
00079 logger.debug("redirect to page"+meta);
00080 super.redirect(meta);
00081 logger.debug("transaction commit (runTransaction return)");
00082 dbms.commit();
00083 }
00084 catch (IgnorableFault e)
00085 {
00086 logger.debug("transaction commit (ignorable fault)");
00087 dbms.commit();
00088 throw e;
00089 }
00090 catch (Fault e)
00091 {
00092 logger.error("transaction roll back (fault)", e);
00093 dbms.rollback();
00094 throw e;
00095 }
00096 catch (Throwable e)
00097 {
00098 logger.error("transaction roll back (throwable)", e);
00099 dbms.rollback();
00100 throw new Fault(e, e);
00101 }
00102 finally
00103 {
00104 dbms.close();
00105 }
00106 }
00107 public void forward(MetaPage meta) throws Fault
00108 {
00109 try
00110 {
00111 logger.debug("forward to page "+meta);
00112 super.forward(meta);
00113 logger.debug("transaction commit (runTransaction return)");
00114 dbms.commit();
00115 }
00116 catch (IgnorableFault e)
00117 {
00118 logger.debug("transaction commit (ignorable fault)");
00119 dbms.commit();
00120 throw e;
00121 }
00122 catch (Fault e)
00123 {
00124 logger.error("transaction roll back (fault)", e);
00125 dbms.rollback();
00126 throw e;
00127 }
00128 catch (Throwable e)
00129 {
00130 logger.error("transaction roll back (throwable)", e);
00131 dbms.rollback();
00132 throw new Fault(e, e);
00133 }
00134 finally
00135 {
00136 dbms.close();
00137 }
00138 }
00139 public abstract void runTransaction() throws Fault;
00140 }