You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by hu...@apache.org on 2002/12/29 02:19:32 UTC

cvs commit: jakarta-struts/doc/faqs database.xml project.xml index.xml

husted      2002/12/28 17:19:32

  Modified:    doc/faqs project.xml index.xml
  Added:       doc/faqs database.xml
  Log:
  Combine pieces from Model and Configuration to create Accessing a Database HowTo.
  
  Revision  Changes    Path
  1.8       +3 -0      jakarta-struts/doc/faqs/project.xml
  
  Index: project.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/doc/faqs/project.xml,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- project.xml	28 Dec 2002 22:27:48 -0000	1.7
  +++ project.xml	29 Dec 2002 01:19:32 -0000	1.8
  @@ -24,6 +24,9 @@
               href="actionForm.html" 
               name="Action Forms"/>
           <item 
  +            href="database.html" 
  +            name="Database"/>
  +        <item 
               href="indexedprops.html" 
               name="Indexed Properties"/>
           <item 
  
  
  
  1.7       +4 -0      jakarta-struts/doc/faqs/index.xml
  
  Index: index.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/doc/faqs/index.xml,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- index.xml	28 Dec 2002 22:27:48 -0000	1.6
  +++ index.xml	29 Dec 2002 01:19:32 -0000	1.7
  @@ -38,6 +38,10 @@
       </li>
       
       <li>
  +    <a href="database.html">Accessing a Database</a>
  +    </li>
  +
  +    <li>
       <a href="indexedprops.html">Indexed Properties, Mapped Properties, and Indexed Tags</a>
       </li>
   
  
  
  
  1.1                  jakarta-struts/doc/faqs/database.xml
  
  Index: database.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <document url="./database.xml">
  
   <properties>
     <author>Craig R. McClanahan</author>
      <author>Mike Schachter</author>
      <author>Ted Husted</author>
      <author>Martin Cooper</author>   <author>Ed Burns</author>
    <title>Accessing a Database</title>
   </properties>
  
  <body>
  <chapter href="actionForm" name="How to Access a Database">
             
  <section name="Accessing a Database" href="database">
  
      <p>
      Ideally, the business logic layer should encapsulate the data access
      details, including acquiring a database connection. 
      However, some application designs expect that the caller able to provide a
      with a database connection or DataSource instance. 
      When this is the case, the Struts DataSource manager can make it easy for 
      your Action to produce these resources on demand.
      </p>
      
      <p>
      The Struts DataSource manager is configured as an element in the
      <a href="../userGuide/configuration.html#data-source_config">
      Struts configuration file</a> (struts-config.xml). 
      The manager can used to deploy any connection pool that implements the
      <code>javax.sql.DataSource</code> interface and is configurable totally
      from JavaBean properties. 
      If your DBMS or container provides a connection pool that meets these 
      requirements, then that component might your first choice.
      </p>
  
      <p>
      The Jakarta Commons dbcp's BasicDataSource 
      [<code>org.apache.commons.dbcp.BasicDataSource</code>] also works well 
      with the DataSource manager, if a native component is not available. 
      The Struts distribution includes a Generic DataSource class in its util
      package, but this is now only a wrapper around the BasicDataSource. 
      The GenericDataSource class is deprecated as of Struts 1.1 and replaced 
      by direct use of the BasicDataSource.
      </p>
  
      <p>
      This is how you would specify a default data source for your application
      from the struts-config.xml:
      </p>
  
  <pre><code><![CDATA[
  <data-sources>
  <!-- configuration for GenericDataSource wrapper -->
  <data-source>
    <set-property
      property="autoCommit"
      value="false"/>
    <set-property
      property="description"
      value="Example Data Source Configuration"/>
    <set-property
      property="driverClass"
      value="org.postgresql.Driver"/>
    <set-property
      property="maxCount"
      value="4"/>
    <set-property
      property="minCount"
      value="2"/>
    <set-property
      property="password"
      value="mypassword"/>
    <set-property
      property="url"
      value="jdbc:postgresql://localhost/mydatabase"/>
    <set-property
      property="user"
      value="myusername"/>
  </data-source>
  </data-sources>
  ]]></code></pre>
  
      <p>
      This is how you would specify a DBCP BasicDataSource for your application:
      </p>
  
  <pre><code><![CDATA[
  <data-sources>
  <!-- configuration for commons BasicDataSource -->
  <data-source type="org.apache.commons.dbcp.BasicDataSource">
      <set-property
        property="driverClassName"
        value="org.postgresql.Driver" />
      <set-property
        property="url"
        value="jdbc:postgresql://localhost/mydatabase" />
      <set-property
        property="maxActive"
        value="10" />
      <set-property
        property="maxWait"
        value="5000" />
      <set-property
        property="defaultAutoCommit"
        value="false" />
      <set-property
        property="defaultReadOnly"
        value="false" />
  
  </data-source>
  </data-sources>
  ]]></code></pre>
  
      <p>
      Note that you can define as many datasource objects as your application 
      requires and refer to each using a logical name. 
      This can be useful in providing better security or scalability, or even 
      to test datasource implementations against each other.
      </p>
  
      <p>
      After a DataSource is defined, here is an example of using the
      manager to establish a connection from within an Action's 
      <code>execute</code> method.
      </p>
  
  <pre><code>
  public ActionForward
         execute(ActionMapping mapping,
                 ActionForm form,
                 HttpServletRequest request,
                 HttpServletResponse response) throws Exception
  {
   javax.sql.DataSource dataSource;
   java.sql.Connection myConnection;
  
   try {
     dataSource = getDataSource(request);
     myConnection = dataSource.getConnection();
  
     //do what you wish with myConnection
   } catch (SQLException sqle) {
     getServlet().log("Connection.process", sqle);
   } finally {
  
     //enclose this in a finally block to make
     //sure the connection is closed
     try {
       myConnection.close();
     } catch (SQLException e) {
       getServlet().log("Connection.close", e);
     }
   }
  }
  </code></pre>
  
      <p>
      <i>Note: Since Struts is now using commons-dbcp for all it's data-source
      needs, the query you provide for the pingQuery attribute must return at
      least one row.</i>
      </p>
  
      <p>
      <b>Example:</b> <code>SELECT COUNT(*) FROM VALIDTABLE</code>
      </p>
  
      <p>
      Just be sure you to replace "VALIDTABLE" with the name of a valid table
      in your database.
      </p>
  
  </section>
  
  </chapter>
  </body>
  </document>
  
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>