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>");