⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 secondlevelcachesessionstore.java

📁 Wicket一个开发Java Web应用程序框架。它使得开发web应用程序变得容易而轻松。 Wicket利用一个POJO data beans组件使得它可以与任何持久层技术相结合。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		}		private void writeObject(java.io.ObjectOutputStream s) throws IOException		{			s.defaultWriteObject();			IPageStore store = getPageStore();			// for IClusteredPageStore we just skip serializing the page, pagestore takes care of it			if (sessionId != null && store instanceof IClusteredPageStore == false)			{				Object page = lastPage;				if (store instanceof ISerializationAwarePageStore)				{					page = ((ISerializationAwarePageStore)store).prepareForSerialization(sessionId,						page);				}				try				{					s.writeObject(page);				}				catch (Exception e)				{					throw new WicketRuntimeException("Failed to serialize " + page.toString(), e);				}			}		}		private void readObject(java.io.ObjectInputStream s) throws IOException,			ClassNotFoundException		{			s.defaultReadObject();			IPageStore store = getPageStore();			if (sessionId != null && store instanceof IClusteredPageStore == false)			{				Object lastPage = s.readObject();				if (store instanceof ISerializationAwarePageStore)				{					lastPage = ((ISerializationAwarePageStore)store).restoreAfterSerialization((Serializable)lastPage);				}				this.lastPage = lastPage;			}		}	}	/**	 * version manager for this session store.	 */	private static final class SecondLevelCachePageVersionManager implements IPageVersionManager	{		private static final long serialVersionUID = 1L;		private short currentVersionNumber;		private short currentAjaxVersionNumber;		private short lastAjaxVersionNumber;		private final Page page;		private transient boolean versionStarted;		/**		 * Construct.		 * 		 * @param page		 */		public SecondLevelCachePageVersionManager(Page page)		{			this.page = page;		}		/**		 * @see org.apache.wicket.version.IPageVersionManager#beginVersion(boolean)		 */		public void beginVersion(boolean mergeVersion)		{			// this is an hack.. when object is read in. It must ignore the			// first version bump.			if (versionStarted)			{				return;			}			versionStarted = true;			if (!mergeVersion)			{				// TODO: Skip existing versions! (Ask pagestore for last				// version)				currentVersionNumber++;				lastAjaxVersionNumber = currentAjaxVersionNumber;				currentAjaxVersionNumber = 0;			}			else			{				if (RequestCycle.get().getRequest() instanceof WebRequest &&					((WebRequest)RequestCycle.get().getRequest()).isAjax())				{					currentAjaxVersionNumber++;				}			}		}		/**		 * @see org.apache.wicket.version.IPageVersionManager#componentAdded(org.apache.wicket.Component)		 */		public void componentAdded(Component component)		{		}		/**		 * @see org.apache.wicket.version.IPageVersionManager#componentModelChanging(org.apache.wicket.Component)		 */		public void componentModelChanging(Component component)		{		}		/**		 * @see org.apache.wicket.version.IPageVersionManager#componentRemoved(org.apache.wicket.Component)		 */		public void componentRemoved(Component component)		{		}		/**		 * @see org.apache.wicket.version.IPageVersionManager#componentStateChanging(org.apache.wicket.version.undo.Change)		 */		public void componentStateChanging(Change change)		{		}		/**		 * @see org.apache.wicket.version.IPageVersionManager#endVersion(boolean)		 */		public void endVersion(boolean mergeVersion)		{			versionStarted = false;			String sessionId = page.getSession().getId();			if (sessionId != null)			{				page.getSession().touch(page);			}		}		/**		 * @see org.apache.wicket.version.IPageVersionManager#expireOldestVersion()		 */		public void expireOldestVersion()		{		}		/**		 * @see org.apache.wicket.version.IPageVersionManager#getAjaxVersionNumber()		 */		public int getAjaxVersionNumber()		{			return currentAjaxVersionNumber;		}		/**		 * @see org.apache.wicket.version.IPageVersionManager#getCurrentVersionNumber()		 */		public int getCurrentVersionNumber()		{			return currentVersionNumber;		}		/**		 * @see org.apache.wicket.version.IPageVersionManager#getVersion(int)		 */		public Page getVersion(int versionNumber)		{			if (currentVersionNumber == versionNumber)			{				return page;			}			return null;		}		/**		 * @see org.apache.wicket.version.IPageVersionManager#getVersions()		 */		public int getVersions()		{			return 0;		}		/**		 * @see org.apache.wicket.version.IPageVersionManager#ignoreVersionMerge()		 */		public void ignoreVersionMerge()		{			currentVersionNumber++;			lastAjaxVersionNumber = currentAjaxVersionNumber;			currentAjaxVersionNumber = 0;		}		/**		 * @see org.apache.wicket.version.IPageVersionManager#rollbackPage(int)		 */		public Page rollbackPage(int numberOfVersions)		{			String sessionId = page.getSession().getId();			if (sessionId != null)			{				int versionNumber = currentVersionNumber;				int ajaxNumber = currentAjaxVersionNumber;				if (versionStarted)				{					versionNumber--;					ajaxNumber--;				}				IPageStore store = ((SecondLevelCacheSessionStore)Application.get()					.getSessionStore()).getStore();				// if the number of versions to rollback can be done inside the				// current page version.				if (ajaxNumber >= numberOfVersions)				{					return store.getPage(sessionId, page.getPageMapName(), page.getNumericId(),						versionNumber, ajaxNumber - numberOfVersions);				}				else				{					// else go one page version down.					versionNumber--;					// then calculate the previous ajax version by looking at					// the last ajax number of the previous version.					ajaxNumber = lastAjaxVersionNumber - (numberOfVersions - ajaxNumber);					if (ajaxNumber < 0)					{						// currently it is not supported to jump over 2						// pages....						log.error("trying to rollback to many versions, jumping over 2 page versions is not supported yet.");						return null;					}					return store.getPage(sessionId, page.getPageMapName(), page.getNumericId(),						versionNumber, ajaxNumber);				}			}			return null;		}		private void readObject(java.io.ObjectInputStream s) throws IOException,			ClassNotFoundException		{			s.defaultReadObject();			// this is an hack.. when object is read in. It must ignore the			// first version bump.			// (matej_k) for now, I'm commenting it out. It causes serious			// trouble with back			// button, where new versions are not created as they should be			// johan promised to look at it soon			// versionStarted = true;		}	}	static final ThreadLocal usedPages = new ThreadLocal();	/**	 * @return	 */	public static ThreadLocal getUsedPages()	{		return usedPages;	}	private final IPageStore pageStore;	/**	 * Construct.	 * 	 * @param application	 *            The application for this store	 * 	 * @param pageStore	 *            Page store for keeping page versions	 */	public SecondLevelCacheSessionStore(Application application, final IPageStore pageStore)	{		super(application);		this.pageStore = pageStore;		// turn automatic multi window support off by default, as we don't		// really		// need to be afraid to run out of history with this implementation.		// note that the session store is created before Application#init is		// called, so if users set this setting explicitly, it'll be overridden		// (and that's exactly what we want: provide a better default, but not		// forcing people to do away with this feature).		Application.get().getPageSettings().setAutomaticMultiWindowSupport(false);	}	/**	 * @see org.apache.wicket.protocol.http.HttpSessionStore#createPageMap(java.lang.String,	 *      org.apache.wicket.Session)	 */	public IPageMap createPageMap(String name)	{		return new SecondLevelCachePageMap(Session.get().getId(), Application.get(), name);	}	/**	 * @see org.apache.wicket.protocol.http.AbstractHttpSessionStore#onEndRequest(org.apache.wicket.Request)	 */	public void onEndRequest(Request request)	{		super.onEndRequest(request);		usedPages.set(null);	}	/**	 * @see org.apache.wicket.protocol.http.AbstractHttpSessionStore#destroy()	 */	public void destroy()	{		super.destroy();		getStore().destroy();	}	/**	 * @return The store to use	 */	public IPageStore getStore()	{		return pageStore;	}	/**	 * @see org.apache.wicket.protocol.http.HttpSessionStore#newVersionManager(org.apache.wicket.Page)	 */	public IPageVersionManager newVersionManager(Page page)	{		return new SecondLevelCachePageVersionManager(page);	}	/**	 * @see org.apache.wicket.session.ISessionStore#setAttribute(org.apache.wicket.Request,	 *      java.lang.String, java.lang.Object)	 */	public void setAttribute(Request request, String name, Object value)	{		// ignore all pages, they are stored through the pagemap		if (!(value instanceof Page))		{			super.setAttribute(request, name, value);		}	}	/**	 * @see org.apache.wicket.protocol.http.AbstractHttpSessionStore#onUnbind(java.lang.String)	 */	protected void onUnbind(String sessionId)	{		getStore().unbind(sessionId);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -