Modified: trunk/rails-integration/src/main/java/org/jruby/webapp/RailsServletJavaDispatcher.java (467 => 468)
--- trunk/rails-integration/src/main/java/org/jruby/webapp/RailsServletJavaDispatcher.java 2007-04-20 06:30:00 UTC (rev 467)
+++ trunk/rails-integration/src/main/java/org/jruby/webapp/RailsServletJavaDispatcher.java 2007-04-20 22:17:24 UTC (rev 468)
@@ -36,7 +36,15 @@
setupEnvironment(runtime, request);
// setup the default session
- setJavaSessionStoreAsDefault(runtime, request);
+ String value =
+ getServletContext().getInitParameter("jruby.session_store");
+ if( value == null ) {
+ setJavaSessionStoreAsDefault(runtime, request);
+ } else if ( value.intern() == "db".intern() ) {
+ setJavaRequestSymbol(null, runtime, request);
+ } else {
+ setJavaSessionStoreAsDefault(runtime, request);
+ }
// create a cgi instance to store the data
IRubyObject cgi = createCgi(runtime);
@@ -50,6 +58,30 @@
JavaEmbedUtils.invokeMethod(runtime, dispatcher, "dispatch", args, void.class);
}
+ protected void setJavaRequestSymbol(RubyHash defaultSessionOptions,
+ Ruby runtime, HttpServletRequest request) throws ServletException {
+
+
+ if( defaultSessionOptions == null ) {
+ RubyModule cgiRequestClass =
+ runtime.getClassFromPath("ActionController::CgiRequest");
+ if (cgiRequestClass == null) {
+ log("JavaServletStore disabled because ActionController::CgiRequest could not be found");
+ return;
+ }
+ defaultSessionOptions =
+ (RubyHash)cgiRequestClass.getConstant("DEFAULT_SESSION_OPTIONS");
+ }
+
+ // store the java request
+ RubySymbol javaRequestSymbol = RubySymbol.newSymbol(runtime, "java_request");
+ IRubyObject javaRequest =
+ JavaEmbedUtils.javaToRuby(runtime, new SessionHolder(request));
+
+ defaultSessionOptions.aset(javaRequestSymbol, javaRequest);
+ }
+
+
protected IRubyObject createCgi(Ruby runtime) {
RubyClass cgiClass = runtime.getClass("CGI");
IRubyObject[] cgiArgs = { JavaEmbedUtils.javaToRuby(runtime, "query") };
@@ -125,9 +157,7 @@
defaultSessionOptions.aset(databaseManagerSymbol, javaServletStore);
// store the java request
- RubySymbol javaRequestSymbol = RubySymbol.newSymbol(runtime, "java_request");
- IRubyObject javaRequest = JavaEmbedUtils.javaToRuby(runtime, new SessionHolder(request));
- defaultSessionOptions.aset(javaRequestSymbol, javaRequest);
+ setJavaRequestSymbol(defaultSessionOptions, runtime, request);
}
protected void setEnv(RubyHash env, String name, String value, String defaultValue) {