You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2005/10/15 16:46:20 UTC
svn commit: r321341 - in /jakarta/tapestry/trunk: examples/Vlib/src/context/
examples/Vlib/src/context/WEB-INF/
examples/Vlib/src/java/org/apache/tapestry/vlib/
examples/Vlib/src/java/org/apache/tapestry/vlib/components/
examples/Vlib/src/java/org/apac...
Author: hlship
Date: Sat Oct 15 07:45:57 2005
New Revision: 321341
URL: http://svn.apache.org/viewcvs?rev=321341&view=rev
Log:
Continue revving Virtual Library for Tapestry 4.0: Remove VirtualLibraryEngine, splitting its responsibilities into a number of small services.
Added:
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/Global.java
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ApplicationLifecycle.java
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ApplicationLifecycleImpl.java
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/DiscardSessionFilter.java
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/VlibStaleSessionPresenter.java
jakarta/tapestry/trunk/examples/Vlib/src/test/org/apache/tapestry/vlib/services/DiscardSessionFilterTest.java
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/error/StaleSessionExceptionPresenterTest.java
- copied, changed from r321214, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/error/TestStaleSessionExceptionPresenter.java
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/web/ServletWebSessionTest.java
- copied, changed from r321214, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/web/TestServletWebSession.java
jakarta/tapestry/trunk/portlet/src/test/org/apache/tapestry/portlet/PortletWebSessionTest.java
- copied, changed from r321214, jakarta/tapestry/trunk/portlet/src/test/org/apache/tapestry/portlet/TestPortletWebSession.java
Removed:
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/VirtualLibraryEngine.java
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/error/TestStaleSessionExceptionPresenter.java
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/web/TestServletWebSession.java
jakarta/tapestry/trunk/portlet/src/test/org/apache/tapestry/portlet/TestPortletWebSession.java
Modified:
jakarta/tapestry/trunk/examples/Vlib/src/context/ApplicationUnavailable.html
jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/Border.html
jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/hivemodule.xml
jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/vlib.application
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/components/Border.java
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/components/Browser.java
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ApplicationUnavailable.java
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BookMatches.java
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ConfirmBookDelete.java
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/NewBook.java
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/EditPublishers.java
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ModelSource.java
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ModelSourceImpl.java
jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.error.xml
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/AbstractEngine.java
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleLinkExceptionPresenter.java
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleLinkExceptionPresenterImpl.java
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleSessionExceptionPresenter.java
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleSessionExceptionPresenterImpl.java
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/web/ServletWebSession.java
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/web/WebSession.java
jakarta/tapestry/trunk/portlet/src/descriptor/META-INF/hivemodule.xml
jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletStaleLinkExceptionPresenter.java
jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletStaleSessionExceptionPresenter.java
jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletWebSession.java
Modified: jakarta/tapestry/trunk/examples/Vlib/src/context/ApplicationUnavailable.html
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/context/ApplicationUnavailable.html?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/context/ApplicationUnavailable.html (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/context/ApplicationUnavailable.html Sat Oct 15 07:45:57 2005
@@ -34,7 +34,7 @@
<a jwcid="@ServiceLink" service="restart" href="#">restart the application</a>.
</p>
-<span jwcid="@If" condition="ognl:engine.debugEnabled">
+<span jwcid="@If" condition="ognl:global.debugEnabled">
<span jwcid="@ExceptionDisplay" exceptions="ognl:exceptions"/>
<span jwcid="@RequestDisplay"/>
Modified: jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/Border.html
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/Border.html?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/Border.html (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/Border.html Sat Oct 15 07:45:57 2005
@@ -113,7 +113,7 @@
</span></td>
</tr>
</table>
-<span jwcid="ib@contrib:InspectorButton" disabled="ognl:! page.engine.debugEnabled"/>
+<span jwcid="ib@contrib:InspectorButton" disabled="ognl:global.debugEnabled"/>
</body>
</html>
</span>
Modified: jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/hivemodule.xml
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/hivemodule.xml?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/hivemodule.xml (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/hivemodule.xml Sat Oct 15 07:45:57 2005
@@ -84,11 +84,52 @@
</service-point>
+ <service-point id="ApplicationLifecycle">
+
+ Controls lifecycle operations; specifically logging out.
+
+ <invoke-factory model="threaded">
+ <construct class="ApplicationLifecycleImpl">
+ <set-object property="stateManager" value="infrastructure:applicationStateManager"/>
+ </construct>
+ </invoke-factory>
+ </service-point>
+
+ <service-point id="DiscardSessionFilter" interface="org.apache.tapestry.services.WebRequestServicerFilter">
+
+ Filter used to optionally discard the session at the end of a request (typically after a logout).
+
+ <invoke-factory>
+ <construct class="DiscardSessionFilter">
+ <set-object property="applicationLifecycle" value="service:ApplicationLifecycle"/>
+ </construct>
+ </invoke-factory>
+
+ </service-point>
+
+ <contribution configuration-id="tapestry.request.WebRequestServicerPipeline">
+ <filter name="discard-session" object="service:DiscardSessionFilter"/>
+ </contribution>
+
<contribution configuration-id="hivemind.ApplicationDefaults">
<!-- Talk to the local JBoss JNDI -->
<default symbol="java.naming.factory.initial" value="org.jnp.interfaces.NamingContextFactory"/>
<default symbol="java.naming.factory.url.pkgs" value="org.jboss.naming:org.jnp.interfaces"/>
<default symbol="java.naming.provider.url" value="localhost:1099"/>
</contribution>
+
+ <contribution configuration-id="tapestry.InfrastructureOverrides">
+ <property name="exceptionPageName" value="ApplicationUnavailable" />
+ </contribution>
+
+ <!-- Override the default implementation with one specific to the Virtual Library -->
+
+ <implementation service-id="tapestry.error.StaleSessionExceptionPresenter">
+ <invoke-factory>
+ <construct class="VlibStaleSessionPresenter" >
+ <set-object property="responseRenderer" value="infrastructure:responseRenderer" />
+ </construct>
+ </invoke-factory>
+ </implementation>
</module>
Modified: jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/vlib.application
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/vlib.application?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/vlib.application (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/vlib.application Sat Oct 15 07:45:57 2005
@@ -19,11 +19,11 @@
"-//Apache Software Foundation//Tapestry Specification 4.0//EN"
"http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
-<application
- name="Virtual Library"
- engine-class="org.apache.tapestry.vlib.VirtualLibraryEngine">
+<application name="Virtual Library">
<meta key="org.apache.tapestry.visit-class" value="org.apache.tapestry.vlib.Visit"/>
+ <meta key="org.apache.tapestry.global-class" value="org.apache.tapestry.vlib.Global"/>
+
<meta key="org.apache.tapestry.page-class-packages" value="org.apache.tapestry.vlib.pages"/>
<meta key="org.apache.tapestry.component-class-packages" value="org.apache.tapestry.vlib.components"/>
Added: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/Global.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/Global.java?rev=321341&view=auto
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/Global.java (added)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/Global.java Sat Oct 15 07:45:57 2005
@@ -0,0 +1,31 @@
+// Copyright 2005 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.vlib;
+
+/**
+ * Allows the application to access the debug flag.
+ *
+ * @author Howard M. Lewis Ship
+ */
+public class Global
+{
+ private static final boolean DEBUG_ENABLED = Boolean
+ .getBoolean("org.apache.tapestry.vlib.debug-enabled");
+
+ public boolean isDebugEnabled()
+ {
+ return DEBUG_ENABLED;
+ }
+}
Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/components/Border.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/components/Border.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/components/Border.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/components/Border.java Sat Oct 15 07:45:57 2005
@@ -20,26 +20,25 @@
import org.apache.tapestry.IPage;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.Tapestry;
+import org.apache.tapestry.annotations.InjectObject;
import org.apache.tapestry.annotations.InjectPage;
import org.apache.tapestry.annotations.InjectState;
+import org.apache.tapestry.annotations.InjectStateFlag;
import org.apache.tapestry.annotations.Message;
import org.apache.tapestry.annotations.Parameter;
import org.apache.tapestry.callback.ICallback;
import org.apache.tapestry.callback.PageCallback;
+import org.apache.tapestry.vlib.Global;
import org.apache.tapestry.vlib.IActivate;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
import org.apache.tapestry.vlib.Visit;
import org.apache.tapestry.vlib.pages.Home;
import org.apache.tapestry.vlib.pages.Login;
+import org.apache.tapestry.vlib.services.ApplicationLifecycle;
/**
* The standard Border component, which provides the title of the page, the link to
* {@link org.apache.tapestry.vlib.pages.MyLibrary}, the
* {@link org.apache.tapestry.vlib.pages.Login} page and the Logout page.
- * <p>
- * TODO: Part of the transition up to Tapestry 4.0 has "broken" the deferrment of state; the Border
- * component on the Home page now forces a session immediately. This needs to be fixed (with a new
- * injection type to identify if the visit state object has yet been created).
*
* @author Howard Lewis Ship
*/
@@ -103,12 +102,21 @@
@InjectState("visit")
public abstract Visit getVisit();
+ @InjectStateFlag("visit")
+ public abstract boolean getVisitExists();
+
@InjectPage("Login")
public abstract Login getLogin();
@InjectPage("Home")
public abstract Home getHome();
+ @InjectState("global")
+ public abstract Global getGlobal();
+
+ @InjectObject("service:vlib.ApplicationLifecycle")
+ public abstract ApplicationLifecycle getApplicationLifecycle();
+
@Message
public abstract String goodbye();
@@ -185,21 +193,12 @@
public boolean isLoggedIn()
{
- Visit visit = getVisit();
-
- if (visit == null)
- return false;
-
- return visit.isUserLoggedIn();
+ return getVisitExists() && getVisit().isUserLoggedIn();
}
public boolean isAdmin()
{
- Visit visit = getVisit();
-
- IRequestCycle cycle = getPage().getRequestCycle();
-
- return visit.isUserLoggedIn() && visit.getUser().isAdmin();
+ return isLoggedIn() && getVisit().getUser().isAdmin();
}
public void editProfile()
@@ -230,9 +229,7 @@
public IPage login()
{
- Visit visit = getVisit();
-
- if (visit.isUserLoggedIn())
+ if (isLoggedIn())
return null;
ICallback callback = new PageCallback(getPage().getPageName());
@@ -246,9 +243,7 @@
public IPage logout()
{
- VirtualLibraryEngine vengine = (VirtualLibraryEngine) getPage().getEngine();
-
- vengine.logout();
+ getApplicationLifecycle().logout();
Home home = getHome();
home.setMessage(goodbye());
Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/components/Browser.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/components/Browser.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/components/Browser.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/components/Browser.java Sat Oct 15 07:45:57 2005
@@ -19,7 +19,6 @@
import org.apache.tapestry.AbstractComponent;
import org.apache.tapestry.IActionListener;
import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IPage;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.Tapestry;
import org.apache.tapestry.annotations.ComponentClass;
@@ -28,7 +27,6 @@
import org.apache.tapestry.event.PageBeginRenderListener;
import org.apache.tapestry.event.PageEvent;
import org.apache.tapestry.vlib.OperationsUser;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
import org.apache.tapestry.vlib.ejb.Book;
import org.apache.tapestry.vlib.ejb.IBookQuery;
import org.apache.tapestry.vlib.services.RemoteCallback;
Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ApplicationUnavailable.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ApplicationUnavailable.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ApplicationUnavailable.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ApplicationUnavailable.java Sat Oct 15 07:45:57 2005
@@ -18,8 +18,7 @@
import org.apache.tapestry.vlib.IErrorProperty;
/**
- * A page only displayed when the application is unavailable (typically because of repeated
- * {@link java.rmi.RemoteException}s or {@link javax.naming.NamingException}s accessing EJBs.
+ * A customized exception page; in non-debug mode, it omits displays the main exception display.
*
* @author Howard Lewis Ship
* @since 2.2
@@ -27,11 +26,16 @@
public abstract class ApplicationUnavailable extends Exception implements IErrorProperty
{
-
- public void activate(String message, Throwable ex)
+ @Override
+ public void setException(Throwable value)
{
- setError(message);
+ super.setException(value);
+
+ String message = value.getMessage();
- setException(ex);
+ if (message == null)
+ message = value.getClass().getName();
+
+ setError(message);
}
}
Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BookMatches.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BookMatches.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BookMatches.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BookMatches.java Sat Oct 15 07:45:57 2005
@@ -24,7 +24,6 @@
import org.apache.tapestry.annotations.Persist;
import org.apache.tapestry.html.BasePage;
import org.apache.tapestry.vlib.OperationsUser;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
import org.apache.tapestry.vlib.components.Browser;
import org.apache.tapestry.vlib.ejb.IBookQuery;
import org.apache.tapestry.vlib.ejb.MasterQueryParameters;
Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ConfirmBookDelete.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ConfirmBookDelete.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ConfirmBookDelete.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ConfirmBookDelete.java Sat Oct 15 07:45:57 2005
@@ -16,7 +16,6 @@
import java.rmi.RemoteException;
-import javax.ejb.FinderException;
import javax.ejb.RemoveException;
import org.apache.hivemind.ApplicationRuntimeException;
@@ -27,9 +26,7 @@
import org.apache.tapestry.annotations.Meta;
import org.apache.tapestry.html.BasePage;
import org.apache.tapestry.vlib.OperationsUser;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.IOperations;
import org.apache.tapestry.vlib.services.RemoteCallback;
/**
Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/NewBook.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/NewBook.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/NewBook.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/NewBook.java Sat Oct 15 07:45:57 2005
@@ -29,7 +29,6 @@
import org.apache.tapestry.event.PageEvent;
import org.apache.tapestry.form.IFormComponent;
import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
import org.apache.tapestry.vlib.Visit;
import org.apache.tapestry.vlib.VlibPage;
import org.apache.tapestry.vlib.ejb.IOperations;
Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/EditPublishers.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/EditPublishers.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/EditPublishers.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/EditPublishers.java Sat Oct 15 07:45:57 2005
@@ -33,7 +33,6 @@
import org.apache.tapestry.event.PageDetachListener;
import org.apache.tapestry.event.PageEvent;
import org.apache.tapestry.util.DefaultPrimaryKeyConverter;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
import org.apache.tapestry.vlib.VlibPage;
import org.apache.tapestry.vlib.ejb.Publisher;
import org.apache.tapestry.vlib.pages.MyLibrary;
Added: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ApplicationLifecycle.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ApplicationLifecycle.java?rev=321341&view=auto
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ApplicationLifecycle.java (added)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ApplicationLifecycle.java Sat Oct 15 07:45:57 2005
@@ -0,0 +1,36 @@
+// Copyright 2005 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.vlib.services;
+
+/**
+ * Threaded (i.e. per-request) service that stores lifecycle operations and actions; used to control
+ * logout behavior.
+ *
+ * @author Howard M. Lewis Ship
+ * @since 4.0
+ */
+public interface ApplicationLifecycle
+{
+ /**
+ * Logs the user out of the systems; sets a flag that causes the session to be discarded at the
+ * end of the request.
+ */
+ void logout();
+
+ /**
+ * If true, then the session (if it exists) should be discarded at the end of the request.
+ */
+ boolean getDiscardSession();
+}
Added: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ApplicationLifecycleImpl.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ApplicationLifecycleImpl.java?rev=321341&view=auto
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ApplicationLifecycleImpl.java (added)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ApplicationLifecycleImpl.java Sat Oct 15 07:45:57 2005
@@ -0,0 +1,53 @@
+// Copyright 2005 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.vlib.services;
+
+import org.apache.tapestry.engine.state.ApplicationStateManager;
+import org.apache.tapestry.vlib.Visit;
+
+/**
+ * Implementation of service vlib.ApplicationLifecycle. Uses the threaded model.
+ *
+ * @author Howard M. Lewis Ship
+ * @since 4.0
+ */
+public class ApplicationLifecycleImpl implements ApplicationLifecycle
+{
+ private boolean _discardSession;
+
+ private ApplicationStateManager _stateManager;
+
+ public void setStateManager(ApplicationStateManager stateManager)
+ {
+ _stateManager = stateManager;
+ }
+
+ public void logout()
+ {
+ _discardSession = true;
+
+ if (_stateManager.exists("visit"))
+ {
+ Visit visit = (Visit) _stateManager.get("visit");
+ visit.setUser(null);
+ }
+ }
+
+ public boolean getDiscardSession()
+ {
+ return _discardSession;
+ }
+
+}
Added: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/DiscardSessionFilter.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/DiscardSessionFilter.java?rev=321341&view=auto
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/DiscardSessionFilter.java (added)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/DiscardSessionFilter.java Sat Oct 15 07:45:57 2005
@@ -0,0 +1,70 @@
+// Copyright 2005 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.vlib.services;
+
+import java.io.IOException;
+
+import org.apache.tapestry.services.WebRequestServicer;
+import org.apache.tapestry.services.WebRequestServicerFilter;
+import org.apache.tapestry.web.WebRequest;
+import org.apache.tapestry.web.WebResponse;
+import org.apache.tapestry.web.WebSession;
+
+/**
+ * Filter, injected into the tapestry.request.WebRequestServicerPipeline configuration, that
+ * optionally discards the session at the end of the request (after a logout, typically).
+ *
+ * @author Howard M. Lewis Ship
+ * @see org.apache.tapestry.vlib.services.ApplicationLifecycle#getDiscardSession()
+ * @since 4.0
+ */
+public class DiscardSessionFilter implements WebRequestServicerFilter
+{
+ private ApplicationLifecycle _applicationLifecycle;
+
+ public void service(WebRequest request, WebResponse response, WebRequestServicer servicer)
+ throws IOException
+ {
+ try
+ {
+ servicer.service(request, response);
+ }
+ finally
+ {
+ if (_applicationLifecycle.getDiscardSession())
+ discardSession(request);
+ }
+ }
+
+ private void discardSession(WebRequest request)
+ {
+ WebSession session = request.getSession(false);
+
+ if (session != null)
+ try
+ {
+ session.invalidate();
+ }
+ catch (IllegalStateException ex)
+ {
+ // Ignore.
+ }
+ }
+
+ public void setApplicationLifecycle(ApplicationLifecycle applicationLifecycle)
+ {
+ _applicationLifecycle = applicationLifecycle;
+ }
+}
Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ModelSource.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ModelSource.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ModelSource.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ModelSource.java Sat Oct 15 07:45:57 2005
@@ -1,3 +1,17 @@
+// Copyright 2005 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
package org.apache.tapestry.vlib.services;
import org.apache.tapestry.form.IPropertySelectionModel;
Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ModelSourceImpl.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ModelSourceImpl.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ModelSourceImpl.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/ModelSourceImpl.java Sat Oct 15 07:45:57 2005
@@ -1,3 +1,17 @@
+// Copyright 2005 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
package org.apache.tapestry.vlib.services;
import java.rmi.RemoteException;
Added: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/VlibStaleSessionPresenter.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/VlibStaleSessionPresenter.java?rev=321341&view=auto
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/VlibStaleSessionPresenter.java (added)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/VlibStaleSessionPresenter.java Sat Oct 15 07:45:57 2005
@@ -0,0 +1,53 @@
+// Copyright 2005 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.vlib.services;
+
+import java.io.IOException;
+
+import org.apache.tapestry.IRequestCycle;
+import org.apache.tapestry.StaleSessionException;
+import org.apache.tapestry.error.StaleSessionExceptionPresenter;
+import org.apache.tapestry.services.ResponseRenderer;
+import org.apache.tapestry.vlib.IMessageProperty;
+
+/**
+ * Implementation of {@link org.apache.tapestry.error.StaleSessionExceptionPresenter} that returns
+ * the user to the home page and displays an error message there.
+ *
+ * @author Howard M. Lewis Ship
+ * @since 4.0
+ */
+public class VlibStaleSessionPresenter implements StaleSessionExceptionPresenter
+{
+ private ResponseRenderer _responseRenderer;
+
+ public void presentStaleSessionException(IRequestCycle cycle, StaleSessionException cause)
+ throws IOException
+ {
+ IMessageProperty home = (IMessageProperty) cycle.getPage("Home");
+
+ home.setMessage("You have been logged out due to inactivity.");
+
+ cycle.activate(home);
+
+ _responseRenderer.renderResponse(cycle);
+ }
+
+ public void setResponseRenderer(ResponseRenderer responseRenderer)
+ {
+ _responseRenderer = responseRenderer;
+ }
+
+}
Added: jakarta/tapestry/trunk/examples/Vlib/src/test/org/apache/tapestry/vlib/services/DiscardSessionFilterTest.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/test/org/apache/tapestry/vlib/services/DiscardSessionFilterTest.java?rev=321341&view=auto
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/test/org/apache/tapestry/vlib/services/DiscardSessionFilterTest.java (added)
+++ jakarta/tapestry/trunk/examples/Vlib/src/test/org/apache/tapestry/vlib/services/DiscardSessionFilterTest.java Sat Oct 15 07:45:57 2005
@@ -0,0 +1,201 @@
+// Copyright 2005 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.vlib.services;
+
+import java.io.IOException;
+
+import org.apache.hivemind.test.HiveMindTestCase;
+import org.apache.tapestry.services.WebRequestServicer;
+import org.apache.tapestry.web.WebRequest;
+import org.apache.tapestry.web.WebResponse;
+import org.apache.tapestry.web.WebSession;
+
+/**
+ * Tests for {@link org.apache.tapestry.vlib.services.DiscardSessionFilter}.
+ *
+ * @author Howard M. Lewis Ship
+ * @since 4.0
+ */
+public class DiscardSessionFilterTest extends HiveMindTestCase
+{
+ public void testNormal() throws Exception
+ {
+ WebRequest request = newRequest();
+ WebResponse response = newResponse();
+ WebRequestServicer servicer = newServicer();
+ ApplicationLifecycle lifecycle = newLifecycle();
+
+ servicer.service(request, response);
+
+ trainGetDiscardSession(lifecycle, false);
+
+ replayControls();
+
+ DiscardSessionFilter filter = new DiscardSessionFilter();
+
+ filter.setApplicationLifecycle(lifecycle);
+
+ filter.service(request, response, servicer);
+
+ verifyControls();
+ }
+
+ public void testDiscard() throws Exception
+ {
+ WebRequest request = newRequest();
+ WebResponse response = newResponse();
+ WebRequestServicer servicer = newServicer();
+ ApplicationLifecycle lifecycle = newLifecycle();
+ WebSession session = newSession();
+
+ servicer.service(request, response);
+
+ trainGetDiscardSession(lifecycle, true);
+
+ trainGetSession(request, session);
+
+ session.invalidate();
+
+ replayControls();
+
+ DiscardSessionFilter filter = new DiscardSessionFilter();
+
+ filter.setApplicationLifecycle(lifecycle);
+
+ filter.service(request, response, servicer);
+
+ verifyControls();
+ }
+
+ public void testDiscardNoSession() throws Exception
+ {
+ WebRequest request = newRequest();
+ WebResponse response = newResponse();
+ WebRequestServicer servicer = newServicer();
+ ApplicationLifecycle lifecycle = newLifecycle();
+
+ servicer.service(request, response);
+
+ trainGetDiscardSession(lifecycle, true);
+
+ trainGetSession(request, null);
+
+ replayControls();
+
+ DiscardSessionFilter filter = new DiscardSessionFilter();
+
+ filter.setApplicationLifecycle(lifecycle);
+
+ filter.service(request, response, servicer);
+
+ verifyControls();
+ }
+
+ public void testDiscardSessionIllegalState() throws Exception
+ {
+ WebRequest request = newRequest();
+ WebResponse response = newResponse();
+ WebRequestServicer servicer = newServicer();
+ ApplicationLifecycle lifecycle = newLifecycle();
+ WebSession session = newSession();
+
+ servicer.service(request, response);
+
+ trainGetDiscardSession(lifecycle, true);
+
+ trainGetSession(request, session);
+
+ session.invalidate();
+ setThrowable(session, new IllegalStateException());
+
+ replayControls();
+
+ DiscardSessionFilter filter = new DiscardSessionFilter();
+
+ filter.setApplicationLifecycle(lifecycle);
+
+ filter.service(request, response, servicer);
+
+ verifyControls();
+ }
+
+ public void testDiscardCheckAfterException() throws Exception
+ {
+ WebRequest request = newRequest();
+ WebResponse response = newResponse();
+ WebRequestServicer servicer = newServicer();
+ ApplicationLifecycle lifecycle = newLifecycle();
+
+ servicer.service(request, response);
+ setThrowable(servicer, new IOException());
+
+ trainGetDiscardSession(lifecycle, false);
+
+ replayControls();
+
+ DiscardSessionFilter filter = new DiscardSessionFilter();
+
+ filter.setApplicationLifecycle(lifecycle);
+
+ try
+ {
+ filter.service(request, response, servicer);
+ unreachable();
+ }
+ catch (IOException ex)
+ {
+ // Expected.
+ }
+
+ verifyControls();
+ }
+
+ private ApplicationLifecycle newLifecycle()
+ {
+ return (ApplicationLifecycle) newMock(ApplicationLifecycle.class);
+ }
+
+ private WebRequestServicer newServicer()
+ {
+ return (WebRequestServicer) newMock(WebRequestServicer.class);
+ }
+
+ private WebResponse newResponse()
+ {
+ return (WebResponse) newMock(WebResponse.class);
+ }
+
+ private WebRequest newRequest()
+ {
+ return (WebRequest) newMock(WebRequest.class);
+ }
+
+ private WebSession newSession()
+ {
+ return (WebSession) newMock(WebSession.class);
+ }
+
+ private void trainGetSession(WebRequest request, WebSession session)
+ {
+ request.getSession(false);
+ setReturnValue(request, session);
+ }
+
+ private void trainGetDiscardSession(ApplicationLifecycle lifecycle, boolean discard)
+ {
+ lifecycle.getDiscardSession();
+ setReturnValue(lifecycle, discard);
+ }
+}
Modified: jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.error.xml
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.error.xml?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.error.xml (original)
+++ jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.error.xml Sat Oct 15 07:45:57 2005
@@ -70,8 +70,6 @@
<construct class="StaleSessionExceptionPresenterImpl">
<set-object property="pageName"
value="infrastructure:staleSessionPageName"/>
- <set-object property="requestExceptionReporter"
- value="infrastructure:requestExceptionReporter"/>
<set-object property="responseRenderer"
value="infrastructure:responseRenderer"/>
</construct>
@@ -88,8 +86,6 @@
<construct class="StaleLinkExceptionPresenterImpl">
<set-object property="pageName"
value="infrastructure:staleLinkPageName"/>
- <set-object property="requestExceptionReporter"
- value="infrastructure:requestExceptionReporter"/>
<set-object property="responseRenderer"
value="infrastructure:responseRenderer"/>
</construct>
Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/AbstractEngine.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/AbstractEngine.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/AbstractEngine.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/AbstractEngine.java Sat Oct 15 07:45:57 2005
@@ -365,6 +365,7 @@
*/
protected void handleStaleLinkException(IRequestCycle cycle, StaleLinkException exception)
+ throws IOException
{
_infrastructure.getStaleLinkExceptionPresenter()
.presentStaleLinkException(cycle, exception);
@@ -384,6 +385,7 @@
*/
protected void handleStaleSessionException(IRequestCycle cycle, StaleSessionException exception)
+ throws IOException
{
_infrastructure.getStaleSessionExceptionPresenter().presentStaleSessionException(
cycle,
Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleLinkExceptionPresenter.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleLinkExceptionPresenter.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleLinkExceptionPresenter.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleLinkExceptionPresenter.java Sat Oct 15 07:45:57 2005
@@ -14,6 +14,8 @@
package org.apache.tapestry.error;
+import java.io.IOException;
+
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.StaleLinkException;
@@ -33,5 +35,6 @@
* @param cause
* the exception that was caught
*/
- public void presentStaleLinkException(IRequestCycle cycle, StaleLinkException cause);
+ public void presentStaleLinkException(IRequestCycle cycle, StaleLinkException cause)
+ throws IOException;
}
Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleLinkExceptionPresenterImpl.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleLinkExceptionPresenterImpl.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleLinkExceptionPresenterImpl.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleLinkExceptionPresenterImpl.java Sat Oct 15 07:45:57 2005
@@ -14,7 +14,9 @@
package org.apache.tapestry.error;
-import org.apache.hivemind.ApplicationRuntimeException;
+import java.io.IOException;
+
+import org.apache.hivemind.util.PropertyUtils;
import org.apache.tapestry.IPage;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.StaleLinkException;
@@ -30,53 +32,25 @@
*/
public class StaleLinkExceptionPresenterImpl implements StaleLinkExceptionPresenter
{
- private RequestExceptionReporter _requestExceptionReporter;
-
private ResponseRenderer _responseRenderer;
private String _pageName;
public void presentStaleLinkException(IRequestCycle cycle, StaleLinkException cause)
+ throws IOException
{
- try
- {
- IPage exceptionPage = cycle.getPage(_pageName);
-
- exceptionPage.setProperty("message", cause.getMessage());
-
- cycle.activate(exceptionPage);
-
- _responseRenderer.renderResponse(cycle);
- }
- catch (Throwable ex)
- {
- // Worst case scenario. The exception page itself is broken, leaving
- // us with no option but to write the cause to the output.
-
- _requestExceptionReporter.reportRequestException(ErrorMessages
- .unableToProcessClientRequest(cause), cause);
+ IPage exceptionPage = cycle.getPage(_pageName);
- // Also, write the exception thrown when redendering the exception
- // page, so that can get fixed as well.
+ PropertyUtils.write(exceptionPage, "message", cause.getMessage());
- _requestExceptionReporter.reportRequestException(ErrorMessages
- .unableToPresentExceptionPage(ex), ex);
-
- // And throw the exception.
-
- throw new ApplicationRuntimeException(ex.getMessage(), ex);
- }
+ cycle.activate(exceptionPage);
+ _responseRenderer.renderResponse(cycle);
}
public void setPageName(String pageName)
{
_pageName = pageName;
- }
-
- public void setRequestExceptionReporter(RequestExceptionReporter requestExceptionReporter)
- {
- _requestExceptionReporter = requestExceptionReporter;
}
public void setResponseRenderer(ResponseRenderer responseRenderer)
Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleSessionExceptionPresenter.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleSessionExceptionPresenter.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleSessionExceptionPresenter.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleSessionExceptionPresenter.java Sat Oct 15 07:45:57 2005
@@ -14,6 +14,8 @@
package org.apache.tapestry.error;
+import java.io.IOException;
+
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.StaleSessionException;
@@ -33,5 +35,6 @@
* @param cause
* the exception that was caught
*/
- public void presentStaleSessionException(IRequestCycle cycle, StaleSessionException cause);
+ public void presentStaleSessionException(IRequestCycle cycle, StaleSessionException cause)
+ throws IOException;
}
Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleSessionExceptionPresenterImpl.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleSessionExceptionPresenterImpl.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleSessionExceptionPresenterImpl.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/error/StaleSessionExceptionPresenterImpl.java Sat Oct 15 07:45:57 2005
@@ -14,7 +14,8 @@
package org.apache.tapestry.error;
-import org.apache.hivemind.ApplicationRuntimeException;
+import java.io.IOException;
+
import org.apache.tapestry.IPage;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.StaleSessionException;
@@ -29,51 +30,23 @@
*/
public class StaleSessionExceptionPresenterImpl implements StaleSessionExceptionPresenter
{
- private RequestExceptionReporter _requestExceptionReporter;
-
private ResponseRenderer _responseRenderer;
private String _pageName;
public void presentStaleSessionException(IRequestCycle cycle, StaleSessionException cause)
+ throws IOException
{
- try
- {
- IPage exceptionPage = cycle.getPage(_pageName);
-
- cycle.activate(exceptionPage);
-
- _responseRenderer.renderResponse(cycle);
- }
- catch (Exception ex)
- {
- // Worst case scenario. The exception page itself is broken, leaving
- // us with no option but to write the cause to the output.
-
- _requestExceptionReporter.reportRequestException(ErrorMessages
- .unableToProcessClientRequest(cause), cause);
-
- // Also, write the exception thrown when redendering the exception
- // page, so that can get fixed as well.
+ IPage exceptionPage = cycle.getPage(_pageName);
- _requestExceptionReporter.reportRequestException(ErrorMessages
- .unableToPresentExceptionPage(ex), ex);
-
- // And throw the exception.
-
- throw new ApplicationRuntimeException(ex.getMessage(), ex);
- }
+ cycle.activate(exceptionPage);
+ _responseRenderer.renderResponse(cycle);
}
public void setPageName(String pageName)
{
_pageName = pageName;
- }
-
- public void setRequestExceptionReporter(RequestExceptionReporter requestExceptionReporter)
- {
- _requestExceptionReporter = requestExceptionReporter;
}
public void setResponseRenderer(ResponseRenderer responseRenderer)
Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/web/ServletWebSession.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/web/ServletWebSession.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/web/ServletWebSession.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/web/ServletWebSession.java Sat Oct 15 07:45:57 2005
@@ -43,7 +43,7 @@
{
receiver.describeAlternate(_httpSession);
}
-
+
public List getAttributeNames()
{
return WebUtils.toSortedList(_httpSession.getAttributeNames());
@@ -70,5 +70,10 @@
public boolean isNew()
{
return _httpSession.isNew();
+ }
+
+ public void invalidate()
+ {
+ _httpSession.invalidate();
}
}
Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/web/WebSession.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/web/WebSession.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/web/WebSession.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/web/WebSession.java Sat Oct 15 07:45:57 2005
@@ -37,4 +37,13 @@
* to join the session.
*/
public boolean isNew();
+
+ /**
+ * Invalidates this session then unbinds any objects bound to it.
+ *
+ * @throws IllegalStateException
+ * if the session is already invalidated.
+ */
+
+ public void invalidate();
}
Copied: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/error/StaleSessionExceptionPresenterTest.java (from r321214, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/error/TestStaleSessionExceptionPresenter.java)
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/error/StaleSessionExceptionPresenterTest.java?p2=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/error/StaleSessionExceptionPresenterTest.java&p1=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/error/TestStaleSessionExceptionPresenter.java&r1=321214&r2=321341&rev=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/error/TestStaleSessionExceptionPresenter.java (original)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/error/StaleSessionExceptionPresenterTest.java Sat Oct 15 07:45:57 2005
@@ -14,7 +14,6 @@
package org.apache.tapestry.error;
-import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.tapestry.IPage;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.StaleSessionException;
@@ -26,7 +25,7 @@
* @author Howard M. Lewis Ship
* @since 4.0
*/
-public class TestStaleSessionExceptionPresenter extends BaseErrorTestCase
+public class StaleSessionExceptionPresenterTest extends BaseErrorTestCase
{
public void testSuccess() throws Exception
{
@@ -48,41 +47,4 @@
verifyControls();
}
- public void testFailure() throws Exception
- {
- StaleSessionException cause = new StaleSessionException();
- Throwable renderCause = new ApplicationRuntimeException("Some failure.");
-
- IPage page = newPage();
-
- IRequestCycle cycle = newCycle("StaleSession", page);
- ResponseRenderer renderer = newRenderer(cycle, renderCause);
- RequestExceptionReporter reporter = newReporter();
-
- cycle.activate(page);
-
- reporter.reportRequestException(ErrorMessages.unableToProcessClientRequest(cause), cause);
- reporter.reportRequestException(
- ErrorMessages.unableToPresentExceptionPage(renderCause),
- renderCause);
-
- replayControls();
-
- StaleSessionExceptionPresenterImpl presenter = new StaleSessionExceptionPresenterImpl();
- presenter.setPageName("StaleSession");
- presenter.setResponseRenderer(renderer);
- presenter.setRequestExceptionReporter(reporter);
-
- try
- {
- presenter.presentStaleSessionException(cycle, cause);
- unreachable();
- }
- catch (ApplicationRuntimeException ex)
- {
- assertSame(renderCause, ex.getRootCause());
- }
-
- verifyControls();
- }
}
Copied: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/web/ServletWebSessionTest.java (from r321214, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/web/TestServletWebSession.java)
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/web/ServletWebSessionTest.java?p2=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/web/ServletWebSessionTest.java&p1=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/web/TestServletWebSession.java&r1=321214&r2=321341&rev=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/web/TestServletWebSession.java (original)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/web/ServletWebSessionTest.java Sat Oct 15 07:45:57 2005
@@ -28,15 +28,14 @@
* @author Howard M. Lewis Ship
* @since 4.0
*/
-public class TestServletWebSession extends BaseWebTestCase
+public class ServletWebSessionTest extends BaseWebTestCase
{
public void testGetAttributeNames()
{
- MockControl control = newControl(HttpSession.class);
- HttpSession session = (HttpSession) control.getMock();
+ HttpSession session = newSession();
session.getAttributeNames();
- control.setReturnValue(newEnumeration());
+ setReturnValue(session, newEnumeration());
replayControls();
@@ -49,15 +48,19 @@
verifyControls();
}
+ private HttpSession newSession()
+ {
+ return (HttpSession) newMock(HttpSession.class);
+ }
+
public void testGetAttribute()
{
Object attribute = new Object();
- MockControl control = newControl(HttpSession.class);
- HttpSession session = (HttpSession) control.getMock();
+ HttpSession session = newSession();
session.getAttribute("attr");
- control.setReturnValue(attribute);
+ setReturnValue(session, attribute);
replayControls();
@@ -72,8 +75,7 @@
{
Object attribute = new Object();
- MockControl control = newControl(HttpSession.class);
- HttpSession session = (HttpSession) control.getMock();
+ HttpSession session = newSession();
session.setAttribute("name", attribute);
@@ -88,8 +90,7 @@
public void testSetAttributeToNull()
{
- MockControl control = newControl(HttpSession.class);
- HttpSession session = (HttpSession) control.getMock();
+ HttpSession session = newSession();
session.removeAttribute("tonull");
@@ -104,17 +105,31 @@
public void testGetId()
{
- MockControl control = newControl(HttpSession.class);
- HttpSession session = (HttpSession) control.getMock();
+ HttpSession session = newSession();
session.getId();
- control.setReturnValue("abc");
+ setReturnValue(session, "abc");
replayControls();
WebSession ws = new ServletWebSession(session);
assertEquals("abc", ws.getId());
+
+ verifyControls();
+ }
+
+ public void testInvalidate()
+ {
+ HttpSession session = newSession();
+
+ session.invalidate();
+
+ replayControls();
+
+ WebSession ws = new ServletWebSession(session);
+
+ ws.invalidate();
verifyControls();
}
Modified: jakarta/tapestry/trunk/portlet/src/descriptor/META-INF/hivemodule.xml
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/portlet/src/descriptor/META-INF/hivemodule.xml?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/portlet/src/descriptor/META-INF/hivemodule.xml (original)
+++ jakarta/tapestry/trunk/portlet/src/descriptor/META-INF/hivemodule.xml Sat Oct 15 07:45:57 2005
@@ -272,8 +272,6 @@
<invoke-factory>
<construct class="PortletStaleSessionExceptionPresenter">
<set-service property="globals" service-id="PortletRequestGlobals"/>
- <set-object property="requestExceptionReporter"
- value="infrastructure:requestExceptionReporter"/>
</construct>
</invoke-factory>
@@ -286,8 +284,6 @@
<invoke-factory>
<construct class="PortletStaleLinkExceptionPresenter">
<set-service property="globals" service-id="PortletRequestGlobals"/>
- <set-object property="requestExceptionReporter"
- value="infrastructure:requestExceptionReporter"/>
</construct>
</invoke-factory>
Modified: jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletStaleLinkExceptionPresenter.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletStaleLinkExceptionPresenter.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletStaleLinkExceptionPresenter.java (original)
+++ jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletStaleLinkExceptionPresenter.java Sat Oct 15 07:45:57 2005
@@ -14,13 +14,13 @@
package org.apache.tapestry.portlet;
+import java.io.IOException;
+
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
-import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.StaleLinkException;
-import org.apache.tapestry.error.RequestExceptionReporter;
import org.apache.tapestry.error.StaleLinkExceptionPresenter;
import org.apache.tapestry.services.ServiceConstants;
@@ -34,49 +34,22 @@
{
private PortletRequestGlobals _globals;
- private RequestExceptionReporter _requestExceptionReporter;
-
public void presentStaleLinkException(IRequestCycle cycle, StaleLinkException cause)
+ throws IOException
{
- try
- {
- ActionRequest request = _globals.getActionRequest();
-
- request.getPortletSession(true).setAttribute(
- PortletConstants.PORTLET_EXCEPTION_MARKUP_ATTRIBUTE,
- cause.getMessage());
-
- ActionResponse response = _globals.getActionResponse();
-
- response.setRenderParameter(
- ServiceConstants.SERVICE,
- PortletConstants.EXCEPTION_SERVICE);
- }
- catch (Exception ex)
- {
- // Worst case scenario. The exception page itself is broken, leaving
- // us with no option but to write the cause to the output.
-
- // Also, write the exception thrown when redendering the exception
- // page, so that can get fixed as well.
+ ActionRequest request = _globals.getActionRequest();
- _requestExceptionReporter.reportRequestException(PortletMessages
- .errorReportingException(ex), ex);
+ request.getPortletSession(true).setAttribute(
+ PortletConstants.PORTLET_EXCEPTION_MARKUP_ATTRIBUTE,
+ cause.getMessage());
- // And throw the exception.
+ ActionResponse response = _globals.getActionResponse();
- throw new ApplicationRuntimeException(ex.getMessage(), ex);
- }
+ response.setRenderParameter(ServiceConstants.SERVICE, PortletConstants.EXCEPTION_SERVICE);
}
public void setGlobals(PortletRequestGlobals globals)
{
_globals = globals;
}
-
- public void setRequestExceptionReporter(RequestExceptionReporter requestExceptionReporter)
- {
- _requestExceptionReporter = requestExceptionReporter;
- }
-
}
Modified: jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletStaleSessionExceptionPresenter.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletStaleSessionExceptionPresenter.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletStaleSessionExceptionPresenter.java (original)
+++ jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletStaleSessionExceptionPresenter.java Sat Oct 15 07:45:57 2005
@@ -32,50 +32,23 @@
{
private PortletRequestGlobals _globals;
- private RequestExceptionReporter _requestExceptionReporter;
-
public void presentStaleSessionException(IRequestCycle cycle, StaleSessionException cause)
{
- try
- {
- String markup = PortletMessages.staleSession();
-
- ActionRequest request = _globals.getActionRequest();
-
- request.getPortletSession(true).setAttribute(
- PortletConstants.PORTLET_EXCEPTION_MARKUP_ATTRIBUTE,
- markup);
-
- ActionResponse response = _globals.getActionResponse();
+ String markup = PortletMessages.staleSession();
- response.setRenderParameter(
- ServiceConstants.SERVICE,
- PortletConstants.EXCEPTION_SERVICE);
- }
- catch (Exception ex)
- {
- // Worst case scenario. The exception page itself is broken, leaving
- // us with no option but to write the cause to the output.
+ ActionRequest request = _globals.getActionRequest();
- // Also, write the exception thrown when redendering the exception
- // page, so that can get fixed as well.
+ request.getPortletSession(true).setAttribute(
+ PortletConstants.PORTLET_EXCEPTION_MARKUP_ATTRIBUTE,
+ markup);
- _requestExceptionReporter.reportRequestException(PortletMessages
- .errorReportingException(ex), ex);
+ ActionResponse response = _globals.getActionResponse();
- // And throw the exception.
-
- throw new ApplicationRuntimeException(ex.getMessage(), ex);
- }
+ response.setRenderParameter(ServiceConstants.SERVICE, PortletConstants.EXCEPTION_SERVICE);
}
public void setGlobals(PortletRequestGlobals globals)
{
_globals = globals;
- }
-
- public void setRequestExceptionReporter(RequestExceptionReporter requestExceptionReporter)
- {
- _requestExceptionReporter = requestExceptionReporter;
}
}
Modified: jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletWebSession.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletWebSession.java?rev=321341&r1=321340&r2=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletWebSession.java (original)
+++ jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletWebSession.java Sat Oct 15 07:45:57 2005
@@ -70,4 +70,9 @@
_portletSession.setAttribute(name, attribute);
}
+ public void invalidate()
+ {
+ _portletSession.invalidate();
+ }
+
}
Copied: jakarta/tapestry/trunk/portlet/src/test/org/apache/tapestry/portlet/PortletWebSessionTest.java (from r321214, jakarta/tapestry/trunk/portlet/src/test/org/apache/tapestry/portlet/TestPortletWebSession.java)
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/portlet/src/test/org/apache/tapestry/portlet/PortletWebSessionTest.java?p2=jakarta/tapestry/trunk/portlet/src/test/org/apache/tapestry/portlet/PortletWebSessionTest.java&p1=jakarta/tapestry/trunk/portlet/src/test/org/apache/tapestry/portlet/TestPortletWebSession.java&r1=321214&r2=321341&rev=321341&view=diff
==============================================================================
--- jakarta/tapestry/trunk/portlet/src/test/org/apache/tapestry/portlet/TestPortletWebSession.java (original)
+++ jakarta/tapestry/trunk/portlet/src/test/org/apache/tapestry/portlet/PortletWebSessionTest.java Sat Oct 15 07:45:57 2005
@@ -28,16 +28,15 @@
* @author Howard M. Lewis Ship
* @since 4.0
*/
-public class TestPortletWebSession extends BasePortletWebTestCase
+public class PortletWebSessionTest extends BasePortletWebTestCase
{
public void testGetAttributeNames()
{
- MockControl control = newControl(PortletSession.class);
- PortletSession session = (PortletSession) control.getMock();
+ PortletSession session = newSession();
session.getAttributeNames();
- control.setReturnValue(newEnumeration());
+ setReturnValue(session, newEnumeration());
replayControls();
@@ -50,15 +49,19 @@
verifyControls();
}
+ private PortletSession newSession()
+ {
+ return (PortletSession) newMock(PortletSession.class);
+ }
+
public void testGetAttribute()
{
Object attribute = new Object();
- MockControl control = newControl(PortletSession.class);
- PortletSession session = (PortletSession) control.getMock();
+ PortletSession session = newSession();
session.getAttribute("attr");
- control.setReturnValue(attribute);
+ setReturnValue(session, attribute);
replayControls();
@@ -73,8 +76,7 @@
{
Object attribute = new Object();
- MockControl control = newControl(PortletSession.class);
- PortletSession session = (PortletSession) control.getMock();
+ PortletSession session = newSession();
session.setAttribute("name", attribute);
@@ -87,20 +89,33 @@
verifyControls();
}
-
public void testGetId()
{
- MockControl control = newControl(PortletSession.class);
- PortletSession session = (PortletSession) control.getMock();
+ PortletSession session = newSession();
session.getId();
- control.setReturnValue("abc");
+ setReturnValue(session, "abc");
replayControls();
WebSession ws = new PortletWebSession(session);
assertEquals("abc", ws.getId());
+
+ verifyControls();
+ }
+
+ public void testInvalidate()
+ {
+ PortletSession session = newSession();
+
+ session.invalidate();
+
+ replayControls();
+
+ WebSession ws = new PortletWebSession(session);
+
+ ws.invalidate();
verifyControls();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org