You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2007/01/10 20:22:03 UTC

svn commit: r494937 - /cocoon/trunk/blocks/cocoon-databases/cocoon-databases-impl/src/main/java/org/apache/cocoon/reading/DatabaseReader.java

Author: cziegeler
Date: Wed Jan 10 11:22:02 2007
New Revision: 494937

URL: http://svn.apache.org/viewvc?view=rev&rev=494937
Log:
Make database reader usable with a normal DataSource.

Modified:
    cocoon/trunk/blocks/cocoon-databases/cocoon-databases-impl/src/main/java/org/apache/cocoon/reading/DatabaseReader.java

Modified: cocoon/trunk/blocks/cocoon-databases/cocoon-databases-impl/src/main/java/org/apache/cocoon/reading/DatabaseReader.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-databases/cocoon-databases-impl/src/main/java/org/apache/cocoon/reading/DatabaseReader.java?view=diff&rev=494937&r1=494936&r2=494937
==============================================================================
--- cocoon/trunk/blocks/cocoon-databases/cocoon-databases-impl/src/main/java/org/apache/cocoon/reading/DatabaseReader.java (original)
+++ cocoon/trunk/blocks/cocoon-databases/cocoon-databases-impl/src/main/java/org/apache/cocoon/reading/DatabaseReader.java Wed Jan 10 11:22:02 2007
@@ -26,6 +26,8 @@
 import java.sql.Timestamp;
 import java.util.Map;
 
+import javax.sql.DataSource;
+
 import org.apache.avalon.excalibur.datasource.DataSourceComponent;
 import org.apache.avalon.framework.activity.Disposable;
 import org.apache.avalon.framework.configuration.Configurable;
@@ -33,8 +35,6 @@
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.parameters.Parameters;
 import org.apache.avalon.framework.service.ServiceException;
-import org.apache.avalon.framework.service.ServiceManager;
-import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.cocoon.ProcessingException;
 import org.apache.cocoon.ResourceNotFoundException;
 import org.apache.cocoon.caching.CacheableProcessingComponent;
@@ -57,8 +57,9 @@
 public class DatabaseReader extends ServiceableReader
                             implements Configurable, Disposable, CacheableProcessingComponent {
 
-    private ServiceSelector datasourceSelector;
-    private DataSourceComponent datasource;
+    private DataSourceComponent dataSourceComponent;
+
+    private DataSource dataSource;
 
     private int typeColumn;
     private boolean defaultCache = true;
@@ -71,10 +72,12 @@
     private long lastModified = System.currentTimeMillis();
     private boolean doCommit;
 
-
-    public void service(final ServiceManager manager) throws ServiceException {
-        super.service(manager);
-        this.datasourceSelector = (ServiceSelector) manager.lookup(DataSourceComponent.ROLE + "Selector");
+    /**
+     * Set a data source to be used by this component.
+     * @param dataSource A datasource.
+     */
+    public void setDataSource(DataSource dataSource) {
+        this.dataSource = dataSource;
     }
 
     /**
@@ -84,11 +87,13 @@
     public void configure(Configuration conf) throws ConfigurationException {
         this.defaultCache = conf.getChild("invalidate").getValue("never").equals("always");
 
-        String datasourceName = conf.getChild("use-connection").getValue();
-        try {
-            this.datasource = (DataSourceComponent) datasourceSelector.select(datasourceName);
-        } catch (ServiceException e) {
-            throw new ConfigurationException("Datasource '" + datasourceName + "' is not available.", e);
+        if ( this.dataSource == null ) {
+            String datasourceName = conf.getChild("use-connection").getValue();
+            try {
+                this.dataSourceComponent = (DataSourceComponent) this.manager.lookup(DataSourceComponent.ROLE + '/' + datasourceName);
+            } catch (ServiceException e) {
+                throw new ConfigurationException("Datasource '" + datasourceName + "' is not available.", e);
+            }
         }
     }
 
@@ -101,7 +106,11 @@
         super.setup(resolver, objectModel, src, par);
 
         try {
-            this.connection = datasource.getConnection();
+            if ( this.dataSource != null ) {
+                this.connection = this.dataSource.getConnection();
+            } else {
+                this.connection = dataSourceComponent.getConnection();
+            }
             if (this.connection.getAutoCommit()) {
                 this.connection.setAutoCommit(false);
             }
@@ -324,6 +333,9 @@
         }
     }
 
+    /**
+     * @see org.apache.cocoon.reading.AbstractReader#recycle()
+     */
     public void recycle() {
         super.recycle();
         this.resource = null;
@@ -331,19 +343,19 @@
         this.mimeType = null;
         this.typeColumn = 0;
 
-        try {
-            if (resultSet != null) {
+        if (resultSet != null) {
+            try {
                 resultSet.close();
-            }
-        } catch (SQLException e) { /* ignored */ }
-        resultSet = null;
+            } catch (SQLException e) { /* ignored */ }
+            resultSet = null;
+        }
 
-        try {
-            if (statement != null) {
+        if (statement != null) {
+            try {
                 statement.close();
-            }
-        } catch (SQLException e) { /* ignored */ }
-        statement = null;
+            } catch (SQLException e) { /* ignored */ }
+            statement = null;
+        }
 
         if (this.connection != null) {
             try {
@@ -363,19 +375,21 @@
         }
     }
 
+    /**
+     * @see org.apache.avalon.framework.activity.Disposable#dispose()
+     */
     public void dispose() {
-        recycle();
-        if (datasource != null) {
-            datasourceSelector.release(datasource);
-            datasource = null;
-        }
-        if (datasourceSelector != null) {
-            manager.release(datasourceSelector);
-            datasourceSelector = null;
+        this.recycle();
+        if (manager != null) {
+            this.manager.release(dataSourceComponent);
+            dataSourceComponent = null;
+            this.manager = null;
         }
-        manager = null;
     }
 
+    /**
+     * @see org.apache.cocoon.reading.AbstractReader#getMimeType()
+     */
     public String getMimeType() {
         if (mimeType != null) {
             return mimeType;