Object session = externalContext.getSession(true);
synchronized (session) {
SynchronizedStateHolder viewStates = (SynchronizedStateHolder) externalContext.getSessionMap().get(
VIEW_STATES_MAP);
if (null == viewStates) {
viewStates = new SynchronizedStateHolder(new LRUMap(getNumberOfViews(externalContext)));
externalContext.getSessionMap()
.put(VIEW_STATES_MAP, viewStates);
}
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);
}
}