You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by eh...@apache.org on 2007/01/04 21:26:50 UTC

svn commit: r492722 - /incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/FilePageStore.java

Author: ehillenius
Date: Thu Jan  4 12:26:49 2007
New Revision: 492722

URL: http://svn.apache.org/viewvc?view=rev&rev=492722
Log:
improvement in error reporting

Modified:
    incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/FilePageStore.java

Modified: incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/FilePageStore.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/FilePageStore.java?view=diff&rev=492722&r1=492721&r2=492722
==============================================================================
--- incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/FilePageStore.java (original)
+++ incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/FilePageStore.java Thu Jan  4 12:26:49 2007
@@ -14,38 +14,40 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package wicket.protocol.http;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import wicket.Application;
-import wicket.Page;
-import wicket.protocol.http.SecondLevelCacheSessionStore.IPageStore;
-import wicket.util.lang.Objects;
-
-/**
+package wicket.protocol.http;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.nio.ByteBuffer;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import wicket.Application;
+import wicket.Page;
+import wicket.protocol.http.SecondLevelCacheSessionStore.IPageStore;
+import wicket.util.lang.Objects;
+
+/**
  * Stores pages on disk.
  * <p>
- * Override {@link #getWorkDir()} to change the default directory
- * for pages, which is configured from the javax.servlet.context.tempdir
- * attribute in the servlet context.
+ * Override {@link #getWorkDir()} to change the default directory for pages,
+ * which is configured from the javax.servlet.context.tempdir attribute in the
+ * servlet context.
  * 
- * @author jcompagner
- */
-public class FilePageStore implements IPageStore
-{
-	/** log. */
+ * @author jcompagner
+ */
+public class FilePageStore implements IPageStore
+{
+	/** log. */
 	protected static Log log = LogFactory.getLog(FilePageStore.class);
-	
+
 	private File defaultWorkDir;
-	
+
 	/**
 	 * Construct.
 	 */
@@ -54,7 +56,7 @@
 		defaultWorkDir = (File)((WebApplication)Application.get()).getServletContext()
 				.getAttribute("javax.servlet.context.tempdir");
 	}
-	
+
 	/**
 	 * Returns the working directory for this disk-based PageStore. Override
 	 * this to configure a different location. The default is
@@ -65,155 +67,163 @@
 	protected File getWorkDir()
 	{
 		return defaultWorkDir;
-	}
-
+	}
+
 	/**
 	 * @see wicket.protocol.http.SecondLevelCacheSessionStore.IPageStore#getPage(java.lang.String,
 	 *      int, int)
-	 */
-	public Page getPage(String sessionId, int id, int versionNumber)
-	{
-		File sessionDir = new File(getWorkDir(), sessionId);
-		if (sessionDir.exists())
-		{
-			File pageFile = getPageFile(id, versionNumber, sessionDir);
-			if (pageFile.exists())
-			{
-				FileInputStream fis = null;
-				try
-				{
-					byte[] pageData = null;
-					fis = new FileInputStream(pageFile);
-					int length = (int)pageFile.length();
-					ByteBuffer bb = ByteBuffer.allocate(length);
-					fis.getChannel().read(bb);
-					if (bb.hasArray())
-					{
-						pageData = bb.array();
-					}
-					else
-					{
-						pageData = new byte[length];
-						bb.get(pageData);
-					}
-
-					Page page = (Page)Objects.byteArrayToObject(pageData);
-					return page.getVersion(versionNumber);
-				}
-				catch (Exception e)
-				{
-					log.debug("Error loading page " + id + " with version " + versionNumber
-							+ " for the sessionid " + sessionId + " from disc", e);
-				}
-				finally
-				{
-					try
-					{
-						if (fis != null)
-						{
-							fis.close();
-						}
-					}
-					catch (IOException ex)
-					{
-						// ignore
-					}
-				}
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * @param id
-	 * @param versionNumber
-	 * @param sessionDir
-	 * @return The file pointing to the page
-	 */
-	private File getPageFile(int id, int versionNumber, File sessionDir)
-	{
-		return new File(sessionDir, Application.get().getApplicationKey() + "-page-" + id
-				+ "-version-" + versionNumber);
-	}
-
-	/**
-	 * @see wicket.protocol.http.SecondLevelCacheSessionStore.IPageStore#removePage(java.lang.String,
-	 *      wicket.Page)
-	 */
-	public void removePage(String sessionId, Page page)
-	{
-		File sessionDir = new File(getWorkDir(), sessionId);
-		if (sessionDir.exists())
-		{
-			File pageFile = getPageFile(page.getNumericId(), page.getCurrentVersionNumber(),
-					sessionDir);
-			if (pageFile.exists())
-			{
-				pageFile.delete();
-			}
-		}
-	}
-
-	/**
-	 * @see wicket.protocol.http.SecondLevelCacheSessionStore.IPageStore#storePage(java.lang.String,
-	 *      wicket.Page)
-	 */
-	public void storePage(String sessionId, Page page)
-	{
-		File sessionDir = new File(getWorkDir(), sessionId);
-		sessionDir.mkdirs();
-		File pageFile = getPageFile(page.getNumericId(), page.getCurrentVersionNumber(), sessionDir);
-		// TODO check can this be called everytime at this place? Putting should
-		// be called after the rendering so it should be ok.
-		page.internalDetach();
-		byte[] bytes = Objects.objectToByteArray(page);
-		FileOutputStream fos = null;
-		try
-		{
-			fos = new FileOutputStream(pageFile);
-			ByteBuffer bb = ByteBuffer.wrap(bytes);
-			fos.getChannel().write(bb);
-		}
-		catch (Exception e)
-		{
-			log.debug("Error saving page " + page.getId() + " with version "
-					+ page.getCurrentVersionNumber() + " for the sessionid " + sessionId
-					+ " from disc", e);
-		}
-		finally
-		{
-			try
-			{
-				if (fos != null)
-				{
-					fos.close();
-				}
-			}
-			catch (IOException ex)
-			{
-				// ignore
-			}
-		}
-
-	}
-
-	/**
-	 * @see wicket.protocol.http.SecondLevelCacheSessionStore.IPageStore#unbind(java.lang.String)
-	 */
-	public void unbind(String sessionId)
-	{
-		File sessionDir = new File(getWorkDir(), sessionId);
-		if (sessionDir.exists())
-		{
-			File[] files = sessionDir.listFiles();
-			if (files != null)
-			{
-				for (int i = 0; i < files.length; i++)
-				{
-					files[i].delete();
-				}
-			}
-			sessionDir.delete();
-		}
-	}
-}
+	 */
+	public Page getPage(String sessionId, int id, int versionNumber)
+	{
+		File sessionDir = new File(getWorkDir(), sessionId);
+		if (sessionDir.exists())
+		{
+			File pageFile = getPageFile(id, versionNumber, sessionDir);
+			if (pageFile.exists())
+			{
+				FileInputStream fis = null;
+				try
+				{
+					byte[] pageData = null;
+					fis = new FileInputStream(pageFile);
+					int length = (int)pageFile.length();
+					ByteBuffer bb = ByteBuffer.allocate(length);
+					fis.getChannel().read(bb);
+					if (bb.hasArray())
+					{
+						pageData = bb.array();
+					}
+					else
+					{
+						pageData = new byte[length];
+						bb.get(pageData);
+					}
+
+					Page page = (Page)Objects.byteArrayToObject(pageData);
+					return page.getVersion(versionNumber);
+				}
+				catch (Exception e)
+				{
+					log.debug("Error loading page " + id + " with version " + versionNumber
+							+ " for the sessionid " + sessionId + " from disc", e);
+				}
+				finally
+				{
+					try
+					{
+						if (fis != null)
+						{
+							fis.close();
+						}
+					}
+					catch (IOException ex)
+					{
+						// ignore
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * @param id
+	 * @param versionNumber
+	 * @param sessionDir
+	 * @return The file pointing to the page
+	 */
+	private File getPageFile(int id, int versionNumber, File sessionDir)
+	{
+		return new File(sessionDir, Application.get().getApplicationKey() + "-page-" + id
+				+ "-version-" + versionNumber);
+	}
+
+	/**
+	 * @see wicket.protocol.http.SecondLevelCacheSessionStore.IPageStore#removePage(java.lang.String,
+	 *      wicket.Page)
+	 */
+	public void removePage(String sessionId, Page page)
+	{
+		File sessionDir = new File(getWorkDir(), sessionId);
+		if (sessionDir.exists())
+		{
+			File pageFile = getPageFile(page.getNumericId(), page.getCurrentVersionNumber(),
+					sessionDir);
+			if (pageFile.exists())
+			{
+				pageFile.delete();
+			}
+		}
+	}
+
+	/**
+	 * @see wicket.protocol.http.SecondLevelCacheSessionStore.IPageStore#storePage(java.lang.String,
+	 *      wicket.Page)
+	 */
+	public void storePage(String sessionId, Page page)
+	{
+		File sessionDir = new File(getWorkDir(), sessionId);
+		sessionDir.mkdirs();
+		File pageFile = getPageFile(page.getNumericId(), page.getCurrentVersionNumber(), sessionDir);
+		// TODO check can this be called everytime at this place? Putting should
+		// be called after the rendering so it should be ok.
+		page.internalDetach();
+		FileOutputStream fos = null;
+		try
+		{
+			final ByteArrayOutputStream out = new ByteArrayOutputStream();
+			try
+			{
+				new ObjectOutputStream(out).writeObject(page);
+			}
+			finally
+			{
+				out.close();
+			}
+			byte[] bytes = out.toByteArray();
+			fos = new FileOutputStream(pageFile);
+			ByteBuffer bb = ByteBuffer.wrap(bytes);
+			fos.getChannel().write(bb);
+		}
+		catch (Exception e)
+		{
+			log.error("Error saving page " + page.getId() + " with version "
+					+ page.getCurrentVersionNumber() + " for the sessionid " + sessionId, e);
+		}
+		finally
+		{
+			try
+			{
+				if (fos != null)
+				{
+					fos.close();
+				}
+			}
+			catch (IOException ex)
+			{
+				// ignore
+			}
+		}
+
+	}
+
+	/**
+	 * @see wicket.protocol.http.SecondLevelCacheSessionStore.IPageStore#unbind(java.lang.String)
+	 */
+	public void unbind(String sessionId)
+	{
+		File sessionDir = new File(getWorkDir(), sessionId);
+		if (sessionDir.exists())
+		{
+			File[] files = sessionDir.listFiles();
+			if (files != null)
+			{
+				for (int i = 0; i < files.length; i++)
+				{
+					files[i].delete();
+				}
+			}
+			sessionDir.delete();
+		}
+	}
+}