Return-Path: Delivered-To: apmail-incubator-isis-commits-archive@minotaur.apache.org Received: (qmail 24760 invoked from network); 18 Mar 2011 15:04:16 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 18 Mar 2011 15:04:16 -0000 Received: (qmail 46916 invoked by uid 500); 18 Mar 2011 15:04:16 -0000 Delivered-To: apmail-incubator-isis-commits-archive@incubator.apache.org Received: (qmail 46899 invoked by uid 500); 18 Mar 2011 15:04:16 -0000 Mailing-List: contact isis-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: isis-dev@incubator.apache.org Delivered-To: mailing list isis-commits@incubator.apache.org Received: (qmail 46892 invoked by uid 99); 18 Mar 2011 15:04:16 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 18 Mar 2011 15:04:16 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 18 Mar 2011 15:04:12 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id C1F102388A38; Fri, 18 Mar 2011 15:03:48 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1082942 - in /incubator/isis/trunk/viewer/scimpi: dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/ dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/debug/ dispatcher/src/main/java/org/apache/isis/... Date: Fri, 18 Mar 2011 15:03:48 -0000 To: isis-commits@incubator.apache.org From: rmatthews@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110318150348.C1F102388A38@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: rmatthews Date: Fri Mar 18 15:03:48 2011 New Revision: 1082942 URL: http://svn.apache.org/viewvc?rev=1082942&view=rev Log: Session data is now serializable, so will persist across restarts of Tomcat etc. Only session data is stored, so almost-simultaneous requests for the same session will not interfere with each other. Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/debug/DebugView.java incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/processor/Request.java incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/Secure.java incubator/isis/trunk/viewer/scimpi/servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/DispatcherServlet.java incubator/isis/trunk/viewer/scimpi/servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/ServletRequestContext.java Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java?rev=1082942&r1=1082941&r2=1082942&view=diff ============================================================================== --- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java (original) +++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java Fri Mar 18 15:03:48 2011 @@ -23,6 +23,7 @@ package org.apache.isis.viewer.scimpi.di import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; +import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -206,10 +207,6 @@ public abstract class RequestContext { String referrer = getHeader("Referer"); // Note spelling mistake is intentional return referrer != null && referrer.contains("localhost"); // TODO need to look for actual domain } - - public boolean isValid() { - return true; - } // ////////////////////////////////////////////////////////////////// // Version @@ -347,6 +344,9 @@ public abstract class RequestContext { public void addVariable(String name, Object value, Scope scope) { name = name != null ? name : RESULT; + if (scope == Scope.SESSION && !(value instanceof Serializable)) { + throw new ScimpiException("SESSION scoped variable (" + name + ") must be serializable: " + value); + } removeExistingVariable(name); variables.get(scope).put(name, value); } @@ -704,6 +704,8 @@ public abstract class RequestContext { public abstract String clearSession(); + public abstract boolean isAborted(); + public void setSession(AuthenticationSession session) { this.session = session; } @@ -722,6 +724,15 @@ public abstract class RequestContext { public void setContentType(String string) {} + public void setSessionData(Map hashMap) { + variables.put(Scope.SESSION, hashMap); + setSession((AuthenticationSession) getVariable("_auth_session")); + } + + public Map getSessionData() { + return variables.get(Scope.SESSION); + } + public boolean isDebugDisabled() { if (debugLevel == null) { Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/debug/DebugView.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/debug/DebugView.java?rev=1082942&r1=1082941&r2=1082942&view=diff ============================================================================== --- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/debug/DebugView.java (original) +++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/debug/DebugView.java Fri Mar 18 15:03:48 2011 @@ -82,7 +82,7 @@ public class DebugView { Throwable cause = throwable.getCause(); if (cause != null && cause != throwable) { writer.println("" + cause.getMessage() + ""); - debug.append(cause.getMessage()); + debug.appendln(cause.getMessage()); causingException(cause); } } Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/processor/Request.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/processor/Request.java?rev=1082942&r1=1082941&r2=1082942&view=diff ============================================================================== --- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/processor/Request.java (original) +++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/processor/Request.java Fri Mar 18 15:03:48 2011 @@ -81,6 +81,9 @@ public class Request implements PageWrit String name = tag.getName(); ElementProcessor processor = processors.getFor(name); process(tag, processor); + if (context.isAborted()) { + return; + } } } } @@ -201,7 +204,6 @@ public class Request implements PageWrit } } throw new ScimpiException("Empty tag not closed"); - } public void pushNewBuffer() { Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/Secure.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/Secure.java?rev=1082942&r1=1082941&r2=1082942&view=diff ============================================================================== --- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/Secure.java (original) +++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/Secure.java Fri Mar 18 15:03:48 2011 @@ -32,6 +32,7 @@ public class Secure extends AbstractElem public void process(Request request) { boolean isLoggedIn = !(IsisContext.getSession().getAuthenticationSession() instanceof UserlessSession); if (!isLoggedIn) { + IsisContext.getMessageBroker().addWarning("You are not currently logged in! Please log in so you can continue."); String view = request.getOptionalProperty(LOGIN_VIEW, "/login.shtml"); request.getContext().redirectTo(view); } Modified: incubator/isis/trunk/viewer/scimpi/servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/DispatcherServlet.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/DispatcherServlet.java?rev=1082942&r1=1082941&r2=1082942&view=diff ============================================================================== --- incubator/isis/trunk/viewer/scimpi/servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/DispatcherServlet.java (original) +++ incubator/isis/trunk/viewer/scimpi/servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/DispatcherServlet.java Fri Mar 18 15:03:48 2011 @@ -21,6 +21,7 @@ package org.apache.isis.viewer.scimpi.se import java.io.IOException; import java.util.Enumeration; +import java.util.HashMap; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; @@ -52,17 +53,14 @@ public class DispatcherServlet extends H } private void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - // TODO: NOF's AuthenticationSession now has its own #getAttribute() and #setAttribute() methods, - // so an alternative is to bind this info onto the AuthSession. - // The core/webapp will (hopefully) evolve to define a standard approach here... try { - ServletRequestContext context = null; + ServletRequestContext context = new ServletRequestContext(); HttpSession httpSession = request.getSession(false); if (httpSession != null) { - context = (ServletRequestContext) httpSession.getAttribute("scimpi-context"); - } - if (context == null || !context.isValid()) { - context = new ServletRequestContext(); + HashMap data = (HashMap) httpSession.getAttribute("scimpi-context"); + if (data != null) { + context.setSessionData(data); + } } context.startRequest(request, response, getServletContext()); dispatcher.process(context, request.getServletPath()); @@ -70,7 +68,6 @@ public class DispatcherServlet extends H LOG.error("servlet exception", e); throw e; } - } @Override Modified: incubator/isis/trunk/viewer/scimpi/servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/ServletRequestContext.java URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/ServletRequestContext.java?rev=1082942&r1=1082941&r2=1082942&view=diff ============================================================================== --- incubator/isis/trunk/viewer/scimpi/servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/ServletRequestContext.java (original) +++ incubator/isis/trunk/viewer/scimpi/servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/ServletRequestContext.java Fri Mar 18 15:03:48 2011 @@ -25,6 +25,7 @@ import java.io.InputStream; import java.io.PrintWriter; import java.net.MalformedURLException; import java.util.Enumeration; +import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.Cookie; @@ -45,6 +46,7 @@ public class ServletRequestContext exten private HttpServletRequest request; private HttpServletResponse response; private ServletContext servletContext; + private boolean isAborted; public void append(DebugView view) { /* @@ -202,8 +204,10 @@ public class ServletRequestContext exten } public void startHttpSession() { + addVariable("_auth_session", getSession(), Scope.SESSION); HttpSession httpSession = request.getSession(true); - httpSession.setAttribute("scimpi-context", this); + Map sessionData = getSessionData(); + httpSession.setAttribute("scimpi-context", sessionData); } protected String getSessionId() { @@ -217,6 +221,7 @@ public class ServletRequestContext exten public void redirectTo(String view) { try { + isAborted = true; getResponse().sendRedirect(view); } catch (IOException e) { throw new DispatchException(e); @@ -225,6 +230,7 @@ public class ServletRequestContext exten public void raiseError(int status) { try { + isAborted = true; getResponse().sendError(status); } catch (IOException e) { throw new RuntimeException(e); @@ -232,6 +238,10 @@ public class ServletRequestContext exten getResponse().setStatus(status); } + public boolean isAborted() { + return isAborted; + } + public void setContentType(String string) { getResponse().setContentType(string); }