X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2FMir.java;h=123f32a629405a6c7536053423cd6dbda86d8035;hb=e29bda38124ad326f38301c54fae65273dadb8b2;hp=88ab04e55c7a5f430677b4decad78def24641e80;hpb=4fc9e364e40307b215a41579ab3daede0d47d95d;p=mir.git diff --git a/source/Mir.java b/source/Mir.java index 88ab04e5..123f32a6 100755 --- a/source/Mir.java +++ b/source/Mir.java @@ -26,12 +26,12 @@ import mircoders.storage.*; */ -public class Mir extends AbstractServlet -{ +public class Mir extends AbstractServlet { + + private static ModuleUsers usersModule=null; + private static ModuleMessage messageModule=null; + private final static HashMap servletModuleInstanceHash = new HashMap(); - private static ModuleUsers usersModule=null; - private static ModuleMessage messageModule=null; - //private static boolean confed=false; public HttpSession session; public void doGet(HttpServletRequest req, HttpServletResponse res) @@ -42,9 +42,7 @@ public class Mir extends AbstractServlet public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException, UnavailableException { - long startTime = (new java.util.Date()).getTime(); - Class theServletModule; - ServletModule smod; + long startTime = System.currentTimeMillis(); long sessionConnectTime=0; String http=""; @@ -152,44 +150,65 @@ public class Mir extends AbstractServlet _sendStartPage(res,req, res.getWriter(),userEntity); return; } + // end of auth - //From now on regular dispatching... - - /** @todo i do already have the code for a ServletModuleInstanceMap - * i will insert it soon. the code is 100times faster than doing - * a classForName-lookup with every execution. will be moved to - * getServletModuleForName //rk - */ - + // From now on regular dispatching... try { - try { - theServletModule = Class.forName("mircoders.servlet.ServletModule" + moduleName); - } catch (ClassNotFoundException e) { - // searching servletmodule in mir.servlet-classes - theServletModule = Class.forName("mir.servlet.ServletModule" + moduleName); - } - //Instantiate the ServletModule - Method m = theServletModule.getMethod("getInstance",null); - smod = (ServletModule)m.invoke(null,null); + // get servletmodule by parameter and continue with dispacher + ServletModule smod = getServletModuleForName(moduleName); ServletModuleDispatch.dispatch(smod,req,res); } - catch (NoSuchMethodException e) { handleError( res,res.getWriter(), "ServletModule" + moduleName + " getInstance() not found."); } - catch (InvocationTargetException e) { handleError( res,res.getWriter(), "ServletModule" + moduleName + " target not found."); } - catch (ClassNotFoundException e) { handleError(res, res.getWriter(), "ServletModule" + moduleName + " not found."); } - catch (IllegalArgumentException e) { handleError( res,res.getWriter(), "ServletModule" + moduleName + " not found."); } + catch (ServletModuleException e) { + handleError(res, res.getWriter(), "ServletException in Module " + moduleName + " -- " + e.toString()); + } catch (ServletModuleUserException e) { - handleUserError(res,res.getWriter(), e.getMsg()); + handleUserError(res,res.getWriter(), "User error" + e.toString()); } - catch (ServletModuleException e){ handleError(res,res.getWriter(), "ServletException in Module ServletModule" + moduleName + " -- " + e.toString()); } - catch (IllegalAccessException e){ - handleError(res,res.getWriter(), "No access to class ServletModule" + moduleName + " -- " + e.toString()); } // timing... - sessionConnectTime = new java.util.Date().getTime() - startTime; + sessionConnectTime = System.currentTimeMillis() - startTime; theLog.printInfo("EXECTIME (" + moduleName + "): " + sessionConnectTime + " ms"); } + + /** + * Private method getServletModuleForName returns ServletModule + * from Cache + * + * @return ServletModule + * + */ + private static ServletModule getServletModuleForName(String moduleName) + throws ServletModuleException { + + // Instance in Map ? + if (!servletModuleInstanceHash.containsKey(moduleName)) { + // was not found in hash... + try { + Class theServletModuleClass=null; + try { + // first we try to get ServletModule from stern.che3.servlet + theServletModuleClass = Class.forName("mircoders.servlet.ServletModule" + moduleName); + } catch (ClassNotFoundException e) { + // on failure, we try to get it from lib-layer + theServletModuleClass = Class.forName("mir.servlet.ServletModule"+ moduleName); + } + Method m = theServletModuleClass.getMethod("getInstance", null); + ServletModule smod = (ServletModule)m.invoke(null, null); + // we put it into map for further reference + servletModuleInstanceHash.put(moduleName,smod); + return smod; + } catch (Exception e) { + throw new ServletModuleException("*** error resolving classname for " + + moduleName +" -- "+ e.toString()); + } + } + else return (ServletModule)servletModuleInstanceHash.get(moduleName); + } + + private void handleError(HttpServletResponse res, PrintWriter out, String errorString) { + try { theLog.printError(errorString); SimpleHash modelRoot = new SimpleHash(); @@ -259,7 +278,7 @@ public class Mir extends AbstractServlet mergeData.put("session",sessionUrl); mergeData.put("login_user", userEntity); if (messageModule == null) messageModule = new ModuleMessage(DatabaseMessages.getInstance()); - mergeData.put("messages", HTMLTemplateProcessor.makeSimpleList(messageModule.getByWhereClause(null, "webdb_create desc",0,10))); + mergeData.put("messages", messageModule.getByWhereClause(null, "webdb_create desc",0,10)); HTMLTemplateProcessor.process(res,getLanguage(req,session)+"/"+startTemplate, mergeData,out); } catch(Exception e) {