ovidiu 01/12/12 09:34:00 Modified: scratchpad/schecoon/src/org/apache/cocoon/scheme/servlet REPLEvalServlet.java REPLGenericServlet.java REPLServlet.java Log: Use a configurable init-expr, destroy-expr, and a main-expr to evaluate Scheme expressions. Pass the HTTP request and response objects in the dynamic environment. Revision Changes Path 1.2 +1 -2 xml-cocoon2/scratchpad/schecoon/src/org/apache/cocoon/scheme/servlet/REPLEvalServlet.java Index: REPLEvalServlet.java =================================================================== RCS file: /home/cvs/xml-cocoon2/scratchpad/schecoon/src/org/apache/cocoon/scheme/servlet/REPLEvalServlet.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- REPLEvalServlet.java 2001/12/10 08:45:17 1.1 +++ REPLEvalServlet.java 2001/12/12 17:34:00 1.2 @@ -69,8 +69,7 @@ System.out.println("executing '" + sbuf + "'"); - Value value = interpreter.eval(sbuf.toString()); - out.println(value.write()); + out.println(eval(sbuf.toString(), request, response)); } catch (Exception ex) { out.println("ERROR: " + ex); 1.2 +70 -1 xml-cocoon2/scratchpad/schecoon/src/org/apache/cocoon/scheme/servlet/REPLGenericServlet.java Index: REPLGenericServlet.java =================================================================== RCS file: /home/cvs/xml-cocoon2/scratchpad/schecoon/src/org/apache/cocoon/scheme/servlet/REPLGenericServlet.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- REPLGenericServlet.java 2001/12/10 08:45:17 1.1 +++ REPLGenericServlet.java 2001/12/12 17:34:00 1.2 @@ -1,10 +1,13 @@ package org.apache.cocoon.scheme.servlet; import java.io.BufferedInputStream; +import java.io.BufferedReader; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; import java.util.zip.GZIPInputStream; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; @@ -14,7 +17,11 @@ import javax.servlet.http.HttpServlet; import sisc.ContinuationException; import sisc.Interpreter; +import sisc.data.InputPort; +import sisc.data.OutputPort; +import sisc.data.Symbol; import sisc.data.Value; +import sisc.modules.J2S; /** * Common functionality for REPL servlets. Reads the configuration @@ -27,15 +34,43 @@ { protected Interpreter interpreter; protected ServletContext servletContext; + protected String initExpression; + protected String destroyExpression; + protected String mainExpression; public void init(ServletConfig config) throws ServletException { + super.init(config); servletContext = config.getServletContext(); - interpreter = new Interpreter(System.in, System.out); + + synchronized (servletContext) { + String attributeName = "sisc scheme interpreter"; + + interpreter = (Interpreter)servletContext.getAttribute(attributeName); + if (interpreter == null) { + interpreter = new Interpreter(System.in, System.out); + servletContext.setAttribute(attributeName, interpreter); + } + } + interpreter.setEvaluator("eval"); loadHeap(config.getInitParameter("sisc-heap")); loadHeap(config.getInitParameter("schecoon-heap")); + + initExpression = config.getInitParameter("init-expression"); + destroyExpression = config.getInitParameter("destroy-expression"); + mainExpression = config.getInitParameter("main-expression"); + + // Evaluate the init expression, discard the returned value and + // any exception thrown + try { + if (initExpression != null && !initExpression.equals("")) + interpreter.eval(initExpression); + } + catch (Exception ex) { + System.out.println("Exception evaluating the init expression: " + ex); + } } protected void loadHeap(String relativePath) @@ -56,6 +91,40 @@ } catch (IOException e) { System.err.println("Error loading heap!"); e.printStackTrace(); + } + } + + public void destroy() + { + // Evaluate the destroy expression, discard the returned value and + // any exception thrown + try { + if (destroyExpression != null && !destroyExpression.equals("")) + interpreter.eval(destroyExpression); + } + catch (Exception ex) { + System.out.println("Exception evaluating the destroy expression: " + ex); + } + } + + public Value eval(String expression, + ServletRequest request, + ServletResponse response) + { + try { + interpreter.define(Symbol.get("*http-request*"), + new J2S.JavaObject(request), + sisc.Util.TOPLEVEL); + interpreter.define(Symbol.get("*http-response*"), + new J2S.JavaObject(response), + sisc.Util.TOPLEVEL); + Value value = interpreter.eval(expression); + return value; + } + catch (Exception ex) { + System.out.println("evaluation error: " + ex); + ex.printStackTrace(); + return null; } } } 1.2 +1 -20 xml-cocoon2/scratchpad/schecoon/src/org/apache/cocoon/scheme/servlet/REPLServlet.java Index: REPLServlet.java =================================================================== RCS file: /home/cvs/xml-cocoon2/scratchpad/schecoon/src/org/apache/cocoon/scheme/servlet/REPLServlet.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- REPLServlet.java 2001/12/10 08:45:17 1.1 +++ REPLServlet.java 2001/12/12 17:34:00 1.2 @@ -1,20 +1,7 @@ package org.apache.cocoon.scheme.servlet; -import java.io.BufferedInputStream; -import java.io.DataInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.util.zip.GZIPInputStream; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServlet; -import sisc.ContinuationException; -import sisc.Interpreter; -import sisc.data.Value; /** * The entry point in the system. This servlet drives the processing @@ -27,12 +14,6 @@ { public void service(ServletRequest request, ServletResponse response) { - try { - Value value = interpreter.eval("(plus 1 2)"); - System.out.println(value.write()); - } - catch (Exception ex) { - System.out.println("evaluation error: " + ex); - } + System.out.println(eval(mainExpression, request, response)); } }
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]