Author: nbelaevski
Date: 2008-06-10 13:47:11 -0400 (Tue, 10 Jun 2008)
New Revision: 8987
Modified:
branches/3.1.x/framework/impl/src/main/java/org/ajax4jsf/application/AjaxStateManager.java
Log:
http://jira.jboss.com/jira/browse/RF-3631
Modified:
branches/3.1.x/framework/impl/src/main/java/org/ajax4jsf/application/AjaxStateManager.java
===================================================================
---
branches/3.1.x/framework/impl/src/main/java/org/ajax4jsf/application/AjaxStateManager.java 2008-06-10
15:41:42 UTC (rev 8986)
+++
branches/3.1.x/framework/impl/src/main/java/org/ajax4jsf/application/AjaxStateManager.java 2008-06-10
17:47:11 UTC (rev 8987)
@@ -25,6 +25,7 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.HashMap;
@@ -265,41 +266,43 @@
}
} else {
synchronized (session) {
- LRUMap viewStates = (LRUMap) externalContext.getSessionMap()
+ SynchronizedStateHolder viewStates = (SynchronizedStateHolder)
externalContext.getSessionMap()
.get(VIEW_STATES_MAP);
if (null != viewStates) {
- LRUMap logicalStates = (LRUMap) viewStates.get(viewId);
- if (null != logicalStates) {
- if (null != id) {
- restoredState = (Object[]) logicalStates.get(id);
- externalContext.getRequestMap().put(VIEW_SEQUENCE,
- id);
- if (null == restoredState) {
+ synchronized (viewStates) {
+ LRUMap stateMap = viewStates.getStateMap();
+ LRUMap logicalStates = (LRUMap) stateMap.get(viewId);
+ if (null != logicalStates) {
+ if (null != id) {
+ restoredState = (Object[]) logicalStates.get(id);
+ externalContext.getRequestMap().put(VIEW_SEQUENCE,
+ id);
+ if (null == restoredState) {
+ if (_log.isDebugEnabled()) {
+ _log
+ .debug("No saved view state found for a Id "
+ + id
+ );
+ }
+ //
http://jira.jboss.com/jira/browse/RF-3542
+// restoredState = (Object[]) logicalStates
+// .get(logicalStates.lastKey());
+ }
+ } else {
if (_log.isDebugEnabled()) {
_log
- .debug("No saved view state found for a Id "
- + id
- );
+ .debug("No version Id for a saved view state in request.");
}
//
http://jira.jboss.com/jira/browse/RF-3542
// restoredState = (Object[]) logicalStates
// .get(logicalStates.lastKey());
}
- } else {
- if (_log.isDebugEnabled()) {
- _log
- .debug("No version Id for a saved view state in request.");
- }
- //
http://jira.jboss.com/jira/browse/RF-3542
-// restoredState = (Object[]) logicalStates
-// .get(logicalStates.lastKey());
+ } else if (_log.isDebugEnabled()) {
+ _log
+ .debug("Can't restore view state : no saved states for a ViewId "
+ + viewId);
}
- } else if (_log.isDebugEnabled()) {
- _log
- .debug("Can't restore view state : no saved states for a ViewId "
- + viewId);
}
-
} else if (_log.isDebugEnabled()) {
_log
.debug("Can't restore view state : no saved view states in
session");
@@ -356,24 +359,30 @@
ExternalContext externalContext = context.getExternalContext();
Object session = externalContext.getSession(true);
synchronized (session) {
- LRUMap viewStates = (LRUMap) externalContext.getSessionMap().get(
+ SynchronizedStateHolder viewStates = (SynchronizedStateHolder)
externalContext.getSessionMap().get(
VIEW_STATES_MAP);
if (null == viewStates) {
- viewStates = new LRUMap(getNumberOfViews(externalContext));
+ viewStates = new SynchronizedStateHolder(new
LRUMap(getNumberOfViews(externalContext)));
externalContext.getSessionMap()
.put(VIEW_STATES_MAP, viewStates);
}
- Object id = getNextViewId(context);
- LRUMap logicalViewsMap = (LRUMap) viewStates.get(viewRoot
- .getViewId());
- if (null == logicalViewsMap) {
- logicalViewsMap = new LRUMap(getNumberOfViews(externalContext));
+
+ synchronized (viewStates) {
+ Object id = getNextViewId(context);
+ LRUMap stateMap = viewStates.getStateMap();
+ LRUMap logicalViewsMap = (LRUMap) stateMap.get(viewRoot
+ .getViewId());
+ if (null == logicalViewsMap) {
+ logicalViewsMap = new LRUMap(getNumberOfViews(externalContext));
+ }
+ // Renew last seen view.
+ stateMap.put(viewRoot.getViewId(), logicalViewsMap);
+ logicalViewsMap.put(id, new Object[] { treeStructure, state });
+ serializedView = new SerializedView(id, null);
}
- // Renew last seen view.
- viewStates.put(viewRoot.getViewId(), logicalViewsMap);
- logicalViewsMap.put(id, new Object[] { treeStructure, state });
- serializedView = new SerializedView(id, null);
}
+
+
return serializedView;
}
@@ -416,6 +425,37 @@
return renderKit;
}
+ protected static final class SynchronizedStateHolder implements Serializable {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -6218719119030970545L;
+
+ private LRUMap stateMap;
+
+ public SynchronizedStateHolder(LRUMap stateMap) {
+ super();
+ this.stateMap = stateMap;
+ }
+
+ public LRUMap getStateMap() {
+ return stateMap;
+ }
+
+ private synchronized void readObject(java.io.ObjectInputStream s)
+ throws IOException, ClassNotFoundException {
+
+ s.defaultReadObject();
+ }
+
+ private synchronized void writeObject(java.io.ObjectOutputStream s) throws IOException
{
+
+ s.defaultWriteObject();
+ }
+
+ }
+
protected static final class TreeStrutureNode implements Externalizable {
/**
* TODO - implement Externalizable to reduce serialized state.