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]