package framepack.boundarypack; /******************************** LEGGIMI **************** 13-8-2002 * FACENDO IL PROGETTO DI RETI HO INDIVIDUATO ALCUNE MODIFICHE DA FARE * 1)In xmltoos eliminare ogni riferimento a config, compresi import * 2)in servletrequestmanager eliminare l'import di toolspack.poolpack!!! * 3)in controller probabilmente si può elimanre l'import di URL */ import framepack.configurationpack.*; import framepack.controlpack.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import toolspack.*; /** * Servlet che gestisce l'interazione della applicazione con gli utenti mediante il protocollo * http. Questa classe è la prima ad essere inizializzata e provvede ad inizializzare tutte * le altre classi dell'applicazione * @author Stefano Ricciarelli * @version 1.2 - Date: 28-06-2002 */ public class ServletRequestManager extends HttpServlet { private static final String CONTENT_TYPE = "text/html"; private static final String DOC_TYPE = ""; private static int N_INSTANCE; private static final String ERROR_PAGE = "

ERRORE

"; private static boolean init_ok = true; private static int sessionTime = 100; // secondi di durata di una sessione private ObjectPool controlPool = null; private ObjectPool viewPool = null; private Configurator config = null; private XmlTools xmlTools = null; /** * Invocato all'avvio della webapplication. Legge gli initParameter della servlet * presenti nel file web.xml e provvede ad inizializzare tutti le classi dell' * applicaizione * @throws ServletException */ public void init() throws ServletException { init_ok = true; boolean ok = true; String configPath, logPath, pagesPath, debug, debugXML, printDebugOnConsoleOrFile , poolInstanceNumber, sessionTime; configPath = this.getInitParameter("configurationBasePath"); if (configPath==null) configPath=""; logPath = this.getInitParameter("logBasePath"); if (logPath==null) logPath=""; pagesPath = this.getInitParameter("outputPagesBasePath"); if (pagesPath==null) pagesPath=""; debug = this.getInitParameter("debug"); if (debug==null) debug=""; debugXML = this.getInitParameter("debugXML"); if (debugXML==null) debugXML=""; printDebugOnConsoleOrFile = this.getInitParameter("printDebugOnConsoleOrFile"); if (printDebugOnConsoleOrFile==null) printDebugOnConsoleOrFile=""; poolInstanceNumber = this.getInitParameter("poolInstanceNumber"); sessionTime = this.getInitParameter("sessionTime"); //Invoco il costruttore di Logger per inizializzare correttamente la classe new Logger(logPath); if (debug.equals("true")) Logger.setDebug(true); else Logger.setDebug(false); if (printDebugOnConsoleOrFile.equals("console")) Logger.setOutputOnConsole(true); else Logger.setOutputOnConsole(false); if (debugXML.equals("true")) Logger.setDebugXML(true); else Logger.setDebugXML(false); try { N_INSTANCE = Integer.parseInt(poolInstanceNumber);} catch (Exception ex) { Logger.print("Errore nei parametri"); N_INSTANCE= 3; } try { this.sessionTime = Integer.parseInt(sessionTime);} catch (Exception ex) { Logger.print("Errore nei parametri"); this.sessionTime = 100; } //Inizializzo Configurator config = Configurator.getInstance(); //per chiamare il costruttore config.setOutputPagesPath(pagesPath); Logger.print(this, "configPath= " + configPath); Logger.print(this, "logPath= " + logPath); config.setViewXSLfile(configPath + "view.xsl"); config.setControlXSLfile(configPath + "control.xsl"); config.setBeansDescriptorXMLfile(configPath + "beansDescriptor.xml"); ok = ok && config.initialize(); //Inizializzo xmlTools XmlTools xmlTools = XmlTools.getInstance(); //Inizializzo requestResolverXML RequestResolverXML requestResolverXML = RequestResolverXML.getInstance(); ok = ok && requestResolverXML.resetTransformers(); //Inizializzo controlPool controlPool = new ObjectPool("framepack.controlpack.Controller", N_INSTANCE); //Inizializzo viewPool viewPool = new ObjectPool("framepack.boundarypack.Viewer", N_INSTANCE); if ( controlPool == null || viewPool == null) ok = false; if (ok) Logger.print(this, "INIZIALIZZAZIONE SERVLET OK"); else { Logger.print(this, "ERRORE INIZIALIZZANDO LA SERVLET"); init_ok = false; } } /** * Metodo richiamato ad ogni richiesta http di un utente. Le variabili locali di questo * metodo sono copie per ogni richiesta quindi non si hanno problemi legati alla concorrenza * @param request la richieta http * @param response la risposta prodotta dall'applicazione a seguito della richiesta * @throws ServletException * @throws IOException */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); session.setMaxInactiveInterval(sessionTime); //Logger.resetTimer(); if (!init_ok) { response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); out.println(ERROR_PAGE); return; } Logger.print(this, "******************************* NUOVA RICHIESTA ************************"); Controller control = null; //Acquisisco un controller dal controllerPool control = (Controller)controlPool.acquireInstanceTimeOut(2000); if (control!=null) { if ( control.execute(request) ) { Logger.print(this, "CONTROLLER: ESECUZIONE TERMINATA CORRETTAMENTE!"); //rilascio il controller controlPool.releaseInstance(control); //VIEW Viewer view = null; //Acquisisco una view dal viewPool.Non è il caso di usare un timeout perché il controller ha //già eseguito e non si può fare rollback, quindi BISOGNA visualizzare view = (Viewer)viewPool.acquireInstance(); if (view == null) { Logger.print(this, "Impossibile acquisire un viewer");} else { //Chiamo la view. boolean result = view.execute(request, response); viewPool.releaseInstance(view); if (result) { Logger.print(this, "tempo usato per debug " + Logger.getUsedTime()); return; } else { Logger.print(this, "VIEWER: ERRORE!!"); } } } } //if (control!=null) else { Logger.print(this, "CONTROLLER: ERRORE!!"); controlPool.releaseInstance(control); } //CASO DI ERRORE Logger.print(this, "ERRORE!!"); response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); out.println(ERROR_PAGE); }//doGet //Process the HTTP Post request public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } //Clean up resources public void destroy() { } }