You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by pi...@apache.org on 2004/04/16 16:13:12 UTC

cvs commit: cocoon-2.2/src/blocks/cocoon.apache.org/jdbc-connector/src/protected/org/apache/cocoon/blocks/jdbc ConnectionComposer.java WirableConnection.java

pier        2004/04/16 07:13:11

  Modified:    src/blocks/cocoon.apache.org/jdbc-connector block.xml
               src/blocks/cocoon.apache.org/jdbc-connector/src/protected/org/apache/cocoon/blocks/jdbc
                        WirableConnection.java
  Added:       src/blocks/cocoon.apache.org/jdbc-connector/src/protected/org/apache/cocoon/blocks/jdbc
                        ConnectionComposer.java
  Log:
  Make the JDBC-connector work.
  
  Revision  Changes    Path
  1.3       +8 -4      cocoon-2.2/src/blocks/cocoon.apache.org/jdbc-connector/block.xml
  
  Index: block.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.2/src/blocks/cocoon.apache.org/jdbc-connector/block.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- block.xml	1 Apr 2004 18:51:16 -0000	1.2
  +++ block.xml	16 Apr 2004 14:13:11 -0000	1.3
  @@ -1,5 +1,9 @@
  -<interface xmlns="http://apache.org/cocoon/blocks/descriptor/1.0"
  -           id="http://cocoon.apache.org/blocks/jdbc-connector/1.0.0">
  +<block xmlns="http://apache.org/cocoon/blocks/descriptor/1.0"
  +       id="http://cocoon.apache.org/blocks/jdbc-connector/1.0.0">
  +
  +  <implementations>
  +    <implements block="http://cocoon.apache.org/blocks/jdbc-connection/1.0"/>
  +  </implementations>
   
     <name>JDBC Connector</name>
   
  @@ -15,10 +19,10 @@
   
     <author href="http://www.vnunet.com/">Pier Fumagalli</author>
   
  -  <provides class="org.apache.cocoon.blocks.jdbc.WirableConnection"/>
  +  <provides composer="org.apache.cocoon.blocks.jdbc.ConnectionComposer"/>
   
     <libraries>
       <library url="protected.jar" access="protected"/>
     </libraries>
   
  -</interface>
  +</block>
  
  
  
  1.2       +10 -1     cocoon-2.2/src/blocks/cocoon.apache.org/jdbc-connector/src/protected/org/apache/cocoon/blocks/jdbc/WirableConnection.java
  
  Index: WirableConnection.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.2/src/blocks/cocoon.apache.org/jdbc-connector/src/protected/org/apache/cocoon/blocks/jdbc/WirableConnection.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- WirableConnection.java	2 Apr 2004 07:40:44 -0000	1.1
  +++ WirableConnection.java	16 Apr 2004 14:13:11 -0000	1.2
  @@ -85,6 +85,15 @@
           }
       }
   
  +    /**
  +     * <p>Return the orignal (nested) connection instance.</p>
  +     *
  +     * @returns a <b>non null</b> {@link Connection} instance.:
  +     */
  +    protected Connection getConnection() {
  +        return(this.connection);
  +    }
  +
       /* ====================================================================== */
   
       /**
  
  
  
  1.1                  cocoon-2.2/src/blocks/cocoon.apache.org/jdbc-connector/src/protected/org/apache/cocoon/blocks/jdbc/ConnectionComposer.java
  
  Index: ConnectionComposer.java
  ===================================================================
  /*
   * Copyright 1999-2004 The Apache Software Foundation.
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.apache.cocoon.blocks.jdbc;
  
  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.SQLException;
  import java.util.Iterator;
  import java.util.Properties;
  
  import org.apache.cocoon.kernel.configuration.ConfigurationException;
  import org.apache.cocoon.kernel.configuration.Parameters;
  import org.apache.cocoon.kernel.composition.Composer;
  import org.apache.cocoon.kernel.composition.Wirings;
  import org.apache.cocoon.kernel.composition.WiringException;
  
  /**
   * <p>A {@link ConnectionComposer} is a simple {@link Composer} creating JDBC
   * {@link Connection} instances.</p>
   *
   * <p>This implementation relies on the {@link WirableConnection} class to
   * provide implementations of JDBC {@link Connection}s.</p>
   * 
   * @author <a href="mailto:pier@apache.org">Pier Fumagalli</a>
   * @version 1.0 (CVS $Revision: 1.1 $)
   */
  public class ConnectionComposer implements Composer {
  
      /** The URL to pass to the driver. */
      private String url = null;
  
      /** The properties to associate with each {@link Connection}. */
      private Properties properties = null;
  
      /**
       * <p>Configure this {@link ConnectionComposer}.</p>
       *
       * <p>This implementation requires a single <code>url</code> parameter to
       * operate (the URL of the JDBC connection). All extra parameters will be
       * converted into {@link String}s and passed as properties to the JDBC
       * {@link DriverManager}.</p>
       *
       * @param parameters the {@link Parameters} configuring the instance.
       * @throws ConfigurationException if this instance could not be configured.
       */
      public void configure(Parameters parameters)
      throws ConfigurationException {
          this.url = parameters.getString("url");
  
          Properties properties = new Properties();
          Iterator iterator = parameters.keySet().iterator();
          while (iterator.hasNext()) {
              String name = (String)iterator.next();
              if (name.equals("url")) continue;
              properties.put(name, parameters.getString(name));
          }
          if (properties.size() > 0) this.properties = properties;
      }
  
      /**
       * <p>Return a new {@link WirableConnection} instance wrapping a JDBC
       * {@link Connection}.</p>
       *
       * @return a <b>non null</b> {@link WirableConnection} instance.
       * @throws Throwable if the {@link Object} can not be (for example)
       *                   instantiated or returned for whatever reason.
       */
      public Object acquire()
      throws Throwable {
          Connection connection = null;
          if (properties == null) {
              connection = DriverManager.getConnection(this.url);
          } else {
              connection = DriverManager.getConnection(this.url, this.properties);
          }
          return(new WirableConnection(connection));
      }
      
      /**
       * <p>Dispose a previously created {@link WirableConnection}.</p>
       *
       * <p>This method will invoke the {@link #dispose(Object)} method.</p>
       *
       * @param object a <b>non null</b> {@link Object} instance as previously
       *               acquired from this {@link Composer} to release.
       */
      public void release(Object object) {
          this.dispose(object);
      }
      
      /**
       * <p>Dispose a previously created {@link WirableConnection}.</p>
       *
       * <p>This method will attempt to close the underlying {@link Connection}
       * nested in the {@link WirableConnection} if it was not closed.</p>
       *
       * @param object a <b>non null</b> {@link Object} instance as previously
       *               acquired from this {@link Composer} to dispose.
       */
      public void dispose(Object object) {
          Connection connection = ((WirableConnection)object).getConnection();
          try {
              if (!connection.isClosed()) connection.close();
          } catch (SQLException e) {
              /* Swallow exception */
          }
      }
  
      /**
       * <p>Contextualize this {@link Composer} with the {@link Wirings}
       * associated to the block where it resides.</p>
       *
       * <p>This implementation does not require any wiring.</p>
       *
       * @param wirings the {@link Wirings} instance associated with
       *                this {@link Composer}'s block.
       * @throws WiringException if there was an error performing operations
       *                              on the supplied {@link Wirings} instance.
       */
      public void contextualize(Wirings wirings)
      throws WiringException {
          /* Nothing to do here */
      }
  }