You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2011/01/02 06:23:42 UTC
svn commit: r1054350 - in /myfaces/extensions/cdi/trunk/jee-modules:
jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/request/
jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/...
Author: gpetracek
Date: Sun Jan 2 05:23:41 2011
New Revision: 1054350
URL: http://svn.apache.org/viewvc?rev=1054350&view=rev
Log:
EXTCDI-116 first draft
Modified:
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/request/CodiFacesContextWrapper.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/request/FacesMessageObserver.java
myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextManagerObserver.java
myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/CodiFacesContextWrapper.java
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/request/CodiFacesContextWrapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/request/CodiFacesContextWrapper.java?rev=1054350&r1=1054349&r2=1054350&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/request/CodiFacesContextWrapper.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/request/CodiFacesContextWrapper.java Sun Jan 2 05:23:41 2011
@@ -19,11 +19,10 @@
package org.apache.myfaces.extensions.cdi.jsf.impl.listener.request;
import org.apache.myfaces.extensions.cdi.core.api.config.CodiCoreConfig;
-import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContext;
import org.apache.myfaces.extensions.cdi.core.impl.util.ClassDeactivation;
import org.apache.myfaces.extensions.cdi.core.impl.util.CodiUtils;
import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.RedirectedConversationAwareExternalContext;
-import org.apache.myfaces.extensions.cdi.jsf.impl.util.ConversationUtils;
+import org.apache.myfaces.extensions.cdi.message.api.Message;
import javax.el.ELContext;
import javax.faces.application.Application;
@@ -36,6 +35,7 @@ import javax.faces.context.ResponseWrite
import javax.faces.render.RenderKit;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
/**
@@ -51,8 +51,6 @@ class CodiFacesContextWrapper extends Fa
private BeforeAfterFacesRequestBroadcaster beforeAfterFacesRequestBroadcaster;
- private WindowContext windowContext;
-
CodiFacesContextWrapper(FacesContext wrappedFacesContext)
{
this.wrappedFacesContext = wrappedFacesContext;
@@ -112,24 +110,17 @@ class CodiFacesContextWrapper extends Fa
{
this.wrappedFacesContext.addMessage(componentId, facesMessage);
- if(this.windowContext == null)
- {
- this.windowContext = ConversationUtils.getWindowContextManager().getCurrentWindowContext();
- }
-
- if(this.windowContext == null)
- {
- return;
- }
+ //don't store it directly in the window context - it would trigger a too early restore (in some cases)
+ Map<String, Object> requestMap = getExternalContext().getRequestMap();
@SuppressWarnings({"unchecked"})
List<FacesMessageEntry> facesMessageEntryList =
- this.windowContext.getAttribute(FacesMessage.class.getName(), List.class);
+ (List<FacesMessageEntry>)requestMap.get(Message.class.getName());
if(facesMessageEntryList == null)
{
facesMessageEntryList = new CopyOnWriteArrayList<FacesMessageEntry>();
- this.windowContext.setAttribute(FacesMessage.class.getName(), facesMessageEntryList);
+ requestMap.put(Message.class.getName(), facesMessageEntryList);
}
facesMessageEntryList.add(new FacesMessageEntry(componentId, facesMessage));
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/request/FacesMessageObserver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/request/FacesMessageObserver.java?rev=1054350&r1=1054349&r2=1054350&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/request/FacesMessageObserver.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/listener/request/FacesMessageObserver.java Sun Jan 2 05:23:41 2011
@@ -22,13 +22,14 @@ import org.apache.myfaces.extensions.cdi
import org.apache.myfaces.extensions.cdi.jsf.api.config.JsfModuleConfig;
import org.apache.myfaces.extensions.cdi.jsf.api.listener.phase.JsfLifecyclePhaseInformation;
import org.apache.myfaces.extensions.cdi.jsf.api.listener.request.AfterFacesRequest;
-import org.apache.myfaces.extensions.cdi.jsf.api.listener.request.BeforeFacesRequest;
+import org.apache.myfaces.extensions.cdi.message.api.Message;
import javax.enterprise.event.Observes;
-import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
/**
* @author Gerhard Petracek
@@ -53,40 +54,21 @@ public class FacesMessageObserver
this.alwaysKeepMessages = jsfModuleConfig.isAlwaysKeepMessages();
}
- protected void restoreFacesMessages(@Observes @BeforeFacesRequest FacesContext facesContext)
- {
- if(!this.alwaysKeepMessages)
- {
- return;
- }
-
- @SuppressWarnings({"unchecked"})
- List<FacesMessageEntry> facesMessageEntryList =
- this.windowContext.getAttribute(FacesMessage.class.getName(), List.class);
-
- if(facesMessageEntryList != null)
- {
- for(FacesMessageEntry facesMessageEntry : facesMessageEntryList)
- {
- facesContext.addMessage(facesMessageEntry.getComponentId(), facesMessageEntry.getFacesMessage());
- facesMessageEntryList.remove(facesMessageEntry);
- }
- facesMessageEntryList.clear();
- }
- }
-
protected void saveFacesMessages(@Observes @AfterFacesRequest FacesContext facesContext)
{
- if(this.lifecyclePhaseInformation.isRenderResponsePhase() || !this.alwaysKeepMessages)
+ if(this.alwaysKeepMessages && !this.lifecyclePhaseInformation.isRenderResponsePhase())
{
+ Map<String, Object> requestMap = facesContext.getExternalContext().getRequestMap();
+
@SuppressWarnings({"unchecked"})
List<FacesMessageEntry> facesMessageEntryList =
- this.windowContext.getAttribute(FacesMessage.class.getName(), List.class);
+ (List<FacesMessageEntry>)requestMap.get(Message.class.getName());
- if(facesMessageEntryList != null)
+ if(facesMessageEntryList == null)
{
- facesMessageEntryList.clear();
+ facesMessageEntryList = new CopyOnWriteArrayList<FacesMessageEntry>();
}
+ this.windowContext.setAttribute(Message.class.getName(), facesMessageEntryList, true);
}
}
}
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextManagerObserver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextManagerObserver.java?rev=1054350&r1=1054349&r2=1054350&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextManagerObserver.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextManagerObserver.java Sun Jan 2 05:23:41 2011
@@ -23,17 +23,20 @@ import org.apache.myfaces.extensions.cdi
import org.apache.myfaces.extensions.cdi.jsf.api.listener.phase.JsfPhaseId;
import org.apache.myfaces.extensions.cdi.jsf.api.request.RequestTypeResolver;
import org.apache.myfaces.extensions.cdi.jsf.api.config.JsfModuleConfig;
+import org.apache.myfaces.extensions.cdi.jsf.impl.listener.request.FacesMessageEntry;
import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.spi.EditableConversation;
import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.spi.EditableWindowContext;
import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.spi.EditableWindowContextManager;
import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.spi.WindowHandler;
import org.apache.myfaces.extensions.cdi.jsf.impl.util.ConversationUtils;
import org.apache.myfaces.extensions.cdi.jsf.impl.util.RequestCache;
+import org.apache.myfaces.extensions.cdi.message.api.Message;
import javax.enterprise.event.Observes;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import java.io.IOException;
+import java.util.List;
import static org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager
.AUTOMATED_ENTRY_POINT_PARAMETER_KEY;
@@ -73,6 +76,8 @@ final class WindowContextManagerObserver
//don't refactor it to a lazy restore
storeCurrentViewIdAsNewViewId(phaseEvent.getFacesContext(), windowContext);
+ tryToRestoreMessages(phaseEvent.getFacesContext(), windowContext, jsfModuleConfig);
+
//for performance reasons + cleanup at the beginning of the request (check timeout,...)
//+ we aren't allowed to cleanup in case of redirects
//we would transfer the restored view-id into the conversation
@@ -85,6 +90,30 @@ final class WindowContextManagerObserver
cleanupInactiveConversations(windowContext);
}
+ private void tryToRestoreMessages(FacesContext facesContext,
+ EditableWindowContext windowContext,
+ JsfModuleConfig jsfModuleConfig)
+ {
+ if(!jsfModuleConfig.isAlwaysKeepMessages())
+ {
+ return;
+ }
+
+ @SuppressWarnings({"unchecked"})
+ List<FacesMessageEntry> facesMessageEntryList =
+ windowContext.getAttribute(Message.class.getName(), List.class);
+
+ if(facesMessageEntryList != null)
+ {
+ for(FacesMessageEntry facesMessageEntry : facesMessageEntryList)
+ {
+ facesContext.addMessage(facesMessageEntry.getComponentId(), facesMessageEntry.getFacesMessage());
+ facesMessageEntryList.remove(facesMessageEntry);
+ }
+ facesMessageEntryList.clear();
+ }
+ }
+
protected void cleanupAndRecordCurrentViewAsOldViewId(
@Observes @AfterPhase(JsfPhaseId.RENDER_RESPONSE) PhaseEvent phaseEvent,
EditableWindowContextManager windowContextManager,
Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/CodiFacesContextWrapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/CodiFacesContextWrapper.java?rev=1054350&r1=1054349&r2=1054350&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/CodiFacesContextWrapper.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/listener/request/CodiFacesContextWrapper.java Sun Jan 2 05:23:41 2011
@@ -19,13 +19,12 @@
package org.apache.myfaces.extensions.cdi.jsf2.impl.listener.request;
import org.apache.myfaces.extensions.cdi.core.api.config.CodiCoreConfig;
-import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContext;
import org.apache.myfaces.extensions.cdi.core.impl.util.ClassDeactivation;
import org.apache.myfaces.extensions.cdi.core.impl.util.CodiUtils;
import org.apache.myfaces.extensions.cdi.jsf.impl.listener.request.BeforeAfterFacesRequestBroadcaster;
import org.apache.myfaces.extensions.cdi.jsf.impl.listener.request.FacesMessageEntry;
-import org.apache.myfaces.extensions.cdi.jsf.impl.util.ConversationUtils;
import org.apache.myfaces.extensions.cdi.jsf2.impl.scope.conversation.RedirectedConversationAwareExternalContext;
+import org.apache.myfaces.extensions.cdi.message.api.Message;
import javax.faces.application.FacesMessage;
import javax.faces.context.ExternalContext;
@@ -33,6 +32,7 @@ import javax.faces.context.FacesContext;
import javax.faces.context.FacesContextWrapper;
import javax.faces.application.Application;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
/**
@@ -48,8 +48,6 @@ class CodiFacesContextWrapper extends Fa
private BeforeAfterFacesRequestBroadcaster beforeAfterFacesRequestBroadcaster;
- private WindowContext windowContext;
-
CodiFacesContextWrapper(FacesContext wrappedFacesContext)
{
this.wrappedFacesContext = wrappedFacesContext;
@@ -117,24 +115,17 @@ class CodiFacesContextWrapper extends Fa
{
this.wrappedFacesContext.addMessage(componentId, facesMessage);
- if(this.windowContext == null)
- {
- this.windowContext = ConversationUtils.getWindowContextManager().getCurrentWindowContext();
- }
-
- if(this.windowContext == null)
- {
- return;
- }
+ //don't store it directly in the window context - it would trigger a too early restore (in some cases)
+ Map<String, Object> requestMap = getExternalContext().getRequestMap();
@SuppressWarnings({"unchecked"})
List<FacesMessageEntry> facesMessageEntryList =
- this.windowContext.getAttribute(FacesMessage.class.getName(), List.class);
+ (List<FacesMessageEntry>)requestMap.get(Message.class.getName());
if(facesMessageEntryList == null)
{
facesMessageEntryList = new CopyOnWriteArrayList<FacesMessageEntry>();
- this.windowContext.setAttribute(FacesMessage.class.getName(), facesMessageEntryList);
+ requestMap.put(Message.class.getName(), facesMessageEntryList);
}
facesMessageEntryList.add(new FacesMessageEntry(componentId, facesMessage));