[Idrs-commit] CVS: Idrs/dev/src/net/sourceforge/idrs/axis IdrsHandler.java,1.4,1.5 IdrsResourceMgr.j
Brought to you by:
bigman921
|
From: Marc B. <big...@us...> - 2004-08-30 01:43:24
|
Update of /cvsroot/idrs/Idrs/dev/src/net/sourceforge/idrs/axis In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19734/src/net/sourceforge/idrs/axis Modified Files: IdrsHandler.java IdrsResourceMgr.java IdrsProvider.java Log Message: changes to RML pages are detected every 5 seconds allowing for hot reload Index: IdrsHandler.java =================================================================== RCS file: /cvsroot/idrs/Idrs/dev/src/net/sourceforge/idrs/axis/IdrsHandler.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** IdrsHandler.java 30 Aug 2004 00:56:10 -0000 1.4 --- IdrsHandler.java 30 Aug 2004 01:43:11 -0000 1.5 *************** *** 46,50 **** public static final String CONFIG_PARSE_OPTION = "parseClass"; ! ConfigInfo config; IdrsResourceMgr mgr; --- 46,50 ---- public static final String CONFIG_PARSE_OPTION = "parseClass"; ! public ConfigInfo config; IdrsResourceMgr mgr; *************** *** 113,116 **** --- 113,118 ---- buildScriptContexts(); logger.info("Created Script Contexts"); + + mgr.config = this.config; } catch (Exception e) { logger.error("Could not initiate handler",e); Index: IdrsResourceMgr.java =================================================================== RCS file: /cvsroot/idrs/Idrs/dev/src/net/sourceforge/idrs/axis/IdrsResourceMgr.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** IdrsResourceMgr.java 29 Aug 2004 05:01:40 -0000 1.3 --- IdrsResourceMgr.java 30 Aug 2004 01:43:11 -0000 1.4 *************** *** 15,18 **** --- 15,19 ---- import java.util.HashMap; + import net.sourceforge.idrs.core.servlet.ConfigInfo; import net.sourceforge.idrs.pool.ScriptPool; import net.sourceforge.idrs.utils.Application; *************** *** 28,30 **** --- 29,32 ---- public HashMap dbs; public ScriptPool scriptPool; + public ConfigInfo config; } Index: IdrsProvider.java =================================================================== RCS file: /cvsroot/idrs/Idrs/dev/src/net/sourceforge/idrs/axis/IdrsProvider.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** IdrsProvider.java 30 Aug 2004 00:56:10 -0000 1.5 --- IdrsProvider.java 30 Aug 2004 01:43:11 -0000 1.6 *************** *** 18,22 **** --- 18,25 ---- import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; + import java.io.File; + import java.io.FileNotFoundException; import java.io.FileReader; + import java.io.IOException; import java.io.ObjectOutputStream; import java.io.OutputStreamWriter; *************** *** 35,40 **** --- 38,45 ---- import net.sourceforge.idrs.core.report.IDRSRep; + import net.sourceforge.idrs.core.servlet.Init; import net.sourceforge.idrs.deploy.compile.RmlCompiler; import net.sourceforge.idrs.pool.DbPool; + import net.sourceforge.idrs.pool.RepPool; import net.sourceforge.idrs.script.embedable.IDRSScriptLanguage; import net.sourceforge.idrs.utils.Application; *************** *** 71,82 **** public static final String CONFIG_IDRS_RML_PATH = "rml"; public static final String CONFIG_IDRS_BASE_PACKAGE = "basePackage"; ! String rmlSrcPath; String basePackage; ! private IDRSRep report; ! static int count; private boolean doneinit; HashMap nameSpaces; /* (non-Javadoc) --- 76,90 ---- public static final String CONFIG_IDRS_RML_PATH = "rml"; public static final String CONFIG_IDRS_BASE_PACKAGE = "basePackage"; ! IdrsResourceMgr mgr; String rmlSrcPath; String basePackage; ! RepPool pool; static int count; private boolean doneinit; HashMap nameSpaces; + private String rmlSchema; + private String rmlTrans; + private String parseClass; + long lastModified; /* (non-Javadoc) *************** *** 95,106 **** Document doc = null; ! IdrsResourceMgr mgr = (IdrsResourceMgr) msgContext.getProperty(IdrsHandler.IDRS_RESOURCES); HashMap dbs = new HashMap(); IDRSScriptLanguage script = null; String buffer = null; try { ! ! List dbnames = this.report.getHead().getRequiredDBs(); Iterator it = dbnames.iterator(); while (it.hasNext()) { --- 103,115 ---- Document doc = null; ! //IdrsResourceMgr mgr = (IdrsResourceMgr) msgContext.getProperty(IdrsHandler.IDRS_RESOURCES); HashMap dbs = new HashMap(); IDRSScriptLanguage script = null; String buffer = null; + IDRSRep report = null; try { ! report = this.pool.getReport(); ! List dbnames = report.getHead().getRequiredDBs(); Iterator it = dbnames.iterator(); while (it.hasNext()) { *************** *** 145,149 **** ! this.report.getHead().init(dbs, 0, 0, --- 154,158 ---- ! report.getHead().init(dbs, 0, 0, *************** *** 168,171 **** --- 177,187 ---- logger.error("Could not process report",e1); } finally { + if (report != null) { + try { + pool.returnReport(report); + } catch (Exception e) { + logger.error("Could not return report",e); + } + } if (script != null) { try { *************** *** 253,256 **** --- 269,274 ---- private void firstinit(MessageContext ctx) { try { + mgr = (IdrsResourceMgr) ctx.getProperty(IdrsHandler.IDRS_RESOURCES); + // get needed info //System.out.println(ctx.getService().getOptions()); *************** *** 263,274 **** ! String rmlTrans = webinf + "/rmlTrans.xml"; ! String rmlSchema = webinf + "/rmlSchema.xml"; ! ! String parseClass = "org.apache.xerces.parsers.SAXParser"; ! rmlSrcPath = servlet.getServletContext().getRealPath(rmlSrcPath); - this.basePackage = (String) ctx.getService().getOption(IdrsProvider.CONFIG_IDRS_BASE_PACKAGE); Hashtable options = ctx.getService().getOptions(); --- 281,289 ---- ! rmlTrans = webinf + "/rmlTrans.xml"; ! rmlSchema = webinf + "/rmlSchema.xml"; ! parseClass = "org.apache.xerces.parsers.SAXParser"; rmlSrcPath = servlet.getServletContext().getRealPath(rmlSrcPath); Hashtable options = ctx.getService().getOptions(); *************** *** 284,289 **** --- 299,323 ---- } + File rml = new File(rmlSrcPath); + this.lastModified = rml.lastModified(); + + + + loadRML(); + } catch (Exception e) { + logger.error("Could not compile page",e); + } + new LookForRML(this).start(); + this.doneinit = true; + } + + /** + * @throws FileNotFoundException + * @throws IOException + * @throws Exception + */ + protected void loadRML() throws FileNotFoundException, IOException, Exception { StringBuffer buf = new StringBuffer(); BufferedReader in = new BufferedReader(new FileReader(rmlSrcPath)); *************** *** 295,311 **** ! this.compilePage(buf.toString(),new PrintWriter(new OutputStreamWriter(System.out)),parseClass,rmlTrans,true,rmlSchema); ! } catch (Exception e) { ! logger.error("Could not compile page",e); ! } ! ! ! ! this.doneinit = true; } ! public void compilePage ( String src, - PrintWriter logger, String parseClass, String rmlTrans, --- 329,337 ---- ! this.compilePage(buf.toString(),parseClass,rmlTrans,true,rmlSchema); } ! public void compilePage ( String src, String parseClass, String rmlTrans, *************** *** 326,335 **** rmlSchema); ! report = compiler.getReport(); ! } catch (Exception e) { ! e.printStackTrace(logger); --- 352,368 ---- rmlSchema); ! IDRSRep report = compiler.getReport(); + pool = createReportPool(); + pool.build( + 10, + 50, + report, + 2000L, + null, + 10); } catch (Exception e) { ! logger.error("Could not compile report",e); *************** *** 338,340 **** --- 371,415 ---- } + + private RepPool createReportPool() throws Exception { + String reportPool = this.mgr.config.getReportPoolClass(); + reportPool = (reportPool != null) ? reportPool : Init.DEFAULT_REPORT_POOL; + return (RepPool) Class.forName(reportPool).newInstance(); + } + } + + class LookForRML extends Thread { + IdrsProvider provider; + static Logger logger = Logger.getLogger(LookForRML.class.getName()); + + public LookForRML(IdrsProvider provider) { + this.provider = provider; + this.setPriority(Thread.MIN_PRIORITY); + } + + public void run() { + while (true) { + File rml = new File(provider.rmlSrcPath); + if (rml.lastModified() > provider.lastModified) { + logger.info("Found new RML, loading"); + try { + provider.loadRML(); + provider.lastModified = rml.lastModified(); + logger.info("Loaded new RML"); + } catch (FileNotFoundException e) { + logger.error("Could not load RML",e); + } catch (IOException e) { + logger.error("Could not load RML",e); + } catch (Exception e) { + logger.error("Could not load RML",e); + } + } + + try { + this.sleep(5000); + } catch (InterruptedException e) { + return; + } + } + } } |