You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by cr...@apache.org on 2001/02/02 19:27:14 UTC
cvs commit: jakarta-struts/src/example/org/apache/struts/example DatabaseServlet.java
craigmcc 01/02/02 10:27:13
Modified: src/example/org/apache/struts/example DatabaseServlet.java
Log:
Modify the database load/unload process so that it will gracefully fail
(instead of throwing NullPointerException) when run in a container
environment were ServletContext.getRealPath() returns a null. For example,
this will occur in a container that runs a webapp out of a WAR directly,
instead of unpacking to a filesystem.
Revision Changes Path
1.5 +33 -37 jakarta-struts/src/example/org/apache/struts/example/DatabaseServlet.java
Index: DatabaseServlet.java
===================================================================
RCS file: /home/cvs/jakarta-struts/src/example/org/apache/struts/example/DatabaseServlet.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- DatabaseServlet.java 2000/10/15 03:34:51 1.4
+++ DatabaseServlet.java 2001/02/02 18:27:10 1.5
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-struts/src/example/org/apache/struts/example/DatabaseServlet.java,v 1.4 2000/10/15 03:34:51 craigmcc Exp $
- * $Revision: 1.4 $
- * $Date: 2000/10/15 03:34:51 $
+ * $Header: /home/cvs/jakarta-struts/src/example/org/apache/struts/example/DatabaseServlet.java,v 1.5 2001/02/02 18:27:10 craigmcc Exp $
+ * $Revision: 1.5 $
+ * $Date: 2001/02/02 18:27:10 $
*
* ====================================================================
*
@@ -65,11 +65,11 @@
import java.io.BufferedInputStream;
import java.io.BufferedWriter;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
+import java.io.InputStream;
import java.io.IOException;
import java.io.FileWriter;
import java.io.PrintWriter;
+import java.net.MalformedURLException;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.MissingResourceException;
@@ -90,7 +90,7 @@
* Demonstration Application.
*
* @author Craig R. McClanahan
- * @version $Revision: 1.4 $ $Date: 2000/10/15 03:34:51 $
+ * @version $Revision: 1.5 $ $Date: 2001/02/02 18:27:10 $
*/
public final class DatabaseServlet
@@ -114,9 +114,9 @@
/**
- * The pathname of our persistent database storage file.
+ * The resource path of our persistent database storage file.
*/
- private String pathname = null;
+ private String pathname = "/WEB-INF/database.xml";
// ---------------------------------------------------- HttpServlet Methods
@@ -131,7 +131,7 @@
if (debug >= 1)
log("Finalizing database servlet");
- // Unload our database to persistent storage
+ // Unload our database to persistent storage if possible
try {
unload();
} catch (Exception e) {
@@ -151,8 +151,8 @@
* <ul>
* <li><strong>debug</strong> - The debugging detail level for this
* servlet, which controls how much information is logged. [0]
- * <li><strong>pathname</strong> - Pathname to our persistent storage
- * [getRealPath("/") + "/WEB-INF/database.xml"]
+ * <li><strong>pathname</strong> - Resource pathname to our persistent
+ * storage ["/WEB-INF/database.xml"]
* </ul>
*
* @exception ServletException if we cannot configure ourselves correctly
@@ -169,6 +169,9 @@
}
if (debug >= 1)
log("Initializing database servlet");
+ value = getServletConfig().getInitParameter("pathname");
+ if (value != null)
+ pathname = value;
// Load our database from persistent storage
try {
@@ -254,15 +257,13 @@
// Acquire an input stream to our database file
if (debug >= 1)
- log("Loading database from '" + pathname() + "'");
- FileInputStream fis = null;
- try {
- fis = new FileInputStream(pathname());
- } catch (FileNotFoundException e) {
- log("No persistent database to be loaded");
- return;
- }
- BufferedInputStream bis = new BufferedInputStream(fis);
+ log("Loading database from '" + pathname + "'");
+ InputStream is = getServletContext().getResourceAsStream(pathname);
+ if (is == null) {
+ log("No such resource available - loading empty database");
+ return;
+ }
+ BufferedInputStream bis = new BufferedInputStream(is);
// Construct a digester to use for parsing
Digester digester = new Digester();
@@ -286,30 +287,25 @@
/**
- * Return the pathname of our persistent storage file.
- */
- private String pathname() {
-
- if (this.pathname != null)
- return (this.pathname);
- else
- return (getServletContext().getRealPath("/") +
- "/WEB-INF/database.xml");
-
- }
-
-
- /**
- * Unload our database to its persistent storage version.
+ * Unload our database to its persistent storage version, if possible.
+ * If we are running directly out of a WAR file, saving cannot occur.
*
* @exception Exception if any problem occurs while unloading
*/
private synchronized void unload() throws Exception {
+ // Calculate the file pathname to our storage file (if any)
+ String pathname =
+ getServletContext().getRealPath(this.pathname);
+ if (pathname != null) {
+ log("Cannot unload database to resource path " + this.pathname);
+ return;
+ }
+
// Create a writer for our database
if (debug >= 1)
- log("Unloading database to '" + pathname() + "'");
- FileWriter fw = new FileWriter(pathname());
+ log("Unloading database to '" + pathname + "'");
+ FileWriter fw = new FileWriter(pathname);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter writer = new PrintWriter(bw);
writer.println("<database>");