Title: [468] trunk/rails-integration/src/main/java/org/jruby/webapp/RailsServletJavaDispatcher.java: provide the option of db as the session store.
Revision
468
Author
whacko
Date
2007-04-20 18:17:24 -0400 (Fri, 20 Apr 2007)

Log Message

provide the option of db as the session store. reviewed by Robert

Modified Paths


Diff

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) {
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel

Reply via email to