JwaaServlet.java
00001 package edu.virtualschool.jwaa.xml;
00002
00003 import java.io.File;
00004 import java.io.IOException;
00005 import java.io.PrintWriter;
00006 import java.sql.Connection;
00007
00008 import javax.servlet.ServletConfig;
00009 import javax.servlet.ServletException;
00010 import javax.servlet.http.HttpServletRequest;
00011 import javax.servlet.http.HttpServletResponse;
00012
00013 import org.apache.log4j.Logger;
00014 import org.apache.log4j.PropertyConfigurator;
00015
00016 import edu.virtualschool.jwaa.AccountAbstraction;
00017 import edu.virtualschool.jwaa.Fault;
00018 import edu.virtualschool.jwaa.GenericServlet;
00019 import edu.virtualschool.jwaa.MetaPage;
00020 import edu.virtualschool.jwaa.bean.DemoAccountBean;
00021 import edu.virtualschool.jwaa.dbms.DBPool;
00022
00027 public class JwaaServlet extends GenericServlet
00028 {
00029 DBPool connectionPool;
00030 File homeDirectory;
00031 File rootDirectory;
00032 String servletUrlPrefix;
00033 RootDirectory root;
00034
00035 final static Logger logger = Logger.getLogger(JwaaServlet.class.getName());
00036
00037 public JwaaServlet()
00038 {
00039 super(new edu.virtualschool.jwaa.MetaPage[]
00040 {
00041 Controller.meta
00042 });
00043 }
00044 public void init(ServletConfig config) throws ServletException
00045 {
00046 logger.info("Initializing Jwaa/XML servlet");
00047 super.init(config);
00048 {
00049 String s = config.getInitParameter("home.directory");
00050 if (s == null)
00051 throw new ServletException("home.directory init parameter missing");
00052 this.homeDirectory = new File(s);
00053 if (!homeDirectory.isDirectory())
00054 throw new ServletException(homeDirectory+" is not a directory");
00055 }
00056 {
00057 File webDir = new File(homeDirectory, "WEB-INF");
00058 File propertiesDir = new File(webDir, "classes");
00059 File log4jProperties = new File(propertiesDir, "log4j.properties");
00060 if (!log4jProperties.exists())
00061 throw new ServletException (log4jProperties+" not found");
00062 logger.info("watching log4j properties = "+log4jProperties);
00063 PropertyConfigurator.configureAndWatch(log4jProperties.toString());
00064 }
00065 {
00066 this.servletUrlPrefix = config.getInitParameter("url.prefix");
00067 if (servletUrlPrefix == null)
00068 throw new ServletException ("url.prefix init parameter missing");
00069 logger.debug("url.prefix is " + servletUrlPrefix);
00070 }
00071 {
00072 String p = config.getInitParameter("root.directory");
00073 if (p == null)
00074 throw new ServletException("root.directory init parameter missing");
00075 rootDirectory = new File(p);
00076 logger.debug("root.directory is " + rootDirectory);
00077 if (!rootDirectory.isDirectory())
00078 throw new ServletException(rootDirectory+" is not a directory");
00079 }
00080 logger.debug("initializing root with "+rootDirectory+" and "+servletUrlPrefix);
00081 root = new RootDirectory(rootDirectory, servletUrlPrefix);
00082 logger.info("Jwaa/XML servlet initialization OK");
00083 }
00091 public final void doFault(
00092 MetaPage meta,
00093 HttpServletRequest rq,
00094 HttpServletResponse rs,
00095 Throwable e)
00096 {
00097 logger.error(e, e);
00098 try
00099 {
00100 PrintWriter pw = rs.getWriter();
00101 pw.println("<h1 align=\"center\">Whups: "+e.getMessage()+"</h1>");
00102 pw.println("<pre>");
00103 e.printStackTrace(pw);
00104 pw.println("</pre>");
00105 }
00106 catch (IOException e2)
00107 {
00108 e2.printStackTrace();
00109 }
00110 }
00111 public MetaPage getDefaultPage()
00112 {
00113 return Controller.meta;
00114 }
00115 public MetaPage getRefusePage()
00116 {
00117 return Controller.meta;
00118 }
00119 public MetaPage getRootPage()
00120 {
00121 return Controller.meta;
00122 }
00123 public AccountAbstraction getNullAccount()
00124 {
00125 return DemoAccountBean.Null;
00126 }
00127 public RootDirectory getRoot()
00128 {
00129 return root;
00130 }
00131 public Connection checkoutConnection() throws Fault
00132 {
00133 return connectionPool.checkout();
00134 }
00135 public void checkinConnection(Connection c) throws Fault
00136 {
00137 connectionPool.checkin(c);
00138 }
00139 }