You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by re...@apache.org on 2014/04/10 15:31:16 UTC

svn commit: r1586296 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NodeStoreFixture.java

Author: reschke
Date: Thu Apr 10 13:31:15 2014
New Revision: 1586296

URL: http://svn.apache.org/r1586296
Log:
OAK-1266 - make sure that the test DataSource is closed at the end of the test

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NodeStoreFixture.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java?rev=1586296&r1=1586295&r2=1586296&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java Thu Apr 10 13:31:15 2014
@@ -16,6 +16,10 @@
  */
 package org.apache.jackrabbit.oak.plugins.document.rdb;
 
+import java.io.Closeable;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.sql.Connection;
 import java.sql.Driver;
 import java.sql.DriverManager;
 import java.sql.SQLException;
@@ -35,9 +39,70 @@ public class RDBDataSourceFactory {
             bds.setUsername(username);
             bds.setPassword(passwd);
             bds.setUrl(url);
-            return bds;
+            return new CloseableDataSource(bds);
         } catch (SQLException ex) {
             throw new MicroKernelException("trying to obtain driver for " + url, ex);
         }
     }
+
+    /**
+     * A {@link Closeable} {@link DataSource} based on a {@link BasicDataSource}. 
+     */
+    private static class CloseableDataSource implements DataSource, Closeable {
+
+        private BasicDataSource ds;
+
+        public CloseableDataSource(BasicDataSource ds) {
+            this.ds = ds;
+        }
+
+        @Override
+        public PrintWriter getLogWriter() throws SQLException {
+            return this.ds.getLogWriter();
+        }
+
+        @Override
+        public int getLoginTimeout() throws SQLException {
+            return this.ds.getLoginTimeout();
+        }
+
+        @Override
+        public void setLogWriter(PrintWriter pw) throws SQLException {
+            this.ds.setLogWriter(pw);
+        }
+
+        @Override
+        public void setLoginTimeout(int t) throws SQLException {
+            this.ds.setLoginTimeout(t);
+        }
+
+        @Override
+        public boolean isWrapperFor(Class<?> c) throws SQLException {
+            return this.ds.isWrapperFor(c);
+        }
+
+        @Override
+        public <T> T unwrap(Class<T> c) throws SQLException {
+            return this.unwrap(c);
+        }
+
+        @Override
+        public void close() throws IOException {
+            try {
+                this.ds.close();
+            } catch (SQLException ex) {
+                throw new IOException("closing data source " + this.ds, ex);
+            }
+        }
+
+        @Override
+        public Connection getConnection() throws SQLException {
+            return this.ds.getConnection();
+        }
+
+        @Override
+        public Connection getConnection(String user, String passwd) throws SQLException {
+            return this.ds.getConnection(user, passwd);
+        }
+    }
 }

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NodeStoreFixture.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NodeStoreFixture.java?rev=1586296&r1=1586295&r2=1586296&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NodeStoreFixture.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NodeStoreFixture.java Thu Apr 10 13:31:15 2014
@@ -24,8 +24,6 @@ import java.util.UUID;
 
 import javax.sql.DataSource;
 
-import com.mongodb.DB;
-
 import org.apache.jackrabbit.mk.core.MicroKernelImpl;
 import org.apache.jackrabbit.oak.kernel.KernelNodeStore;
 import org.apache.jackrabbit.oak.plugins.document.DocumentMK;
@@ -38,6 +36,8 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 
+import com.mongodb.DB;
+
 /**
  * NodeStore fixture for parametrized tests.
  */
@@ -50,7 +50,7 @@ public abstract class NodeStoreFixture {
         public NodeStore createNodeStore() {
             return new CloseableNodeStore(new DocumentMK.Builder().open());
         }
-        
+
         @Override
         public NodeStore createNodeStore(int clusterNodeId) {
             MongoConnection connection;
@@ -80,18 +80,21 @@ public abstract class NodeStoreFixture {
     public static final NodeStoreFixture DOCUMENT_NS = createDocumentFixture("mongodb://localhost:27017/oak");
 
     public static final NodeStoreFixture DOCUMENT_JDBC = new NodeStoreFixture() {
+
+        private DataSource ds;
+
         @Override
         public NodeStore createNodeStore() {
             String id = UUID.randomUUID().toString();
-            DataSource ds = RDBDataSourceFactory.forJdbcUrl("jdbc:h2:mem:" + id, "sa", "");
-            return new DocumentMK.Builder().setRDBConnection(ds).getNodeStore();
+            this.ds = RDBDataSourceFactory.forJdbcUrl("jdbc:h2:mem:" + id, "sa", "");
+            return new DocumentMK.Builder().setRDBConnection(this.ds).getNodeStore();
         }
 
         @Override
         public NodeStore createNodeStore(int clusterNodeId) {
             try {
-                DataSource ds = RDBDataSourceFactory.forJdbcUrl("jdbc:h2:mem:oaknodes-" + clusterNodeId, "sa", "");
-                return new DocumentMK.Builder().setRDBConnection(ds).getNodeStore();
+                this.ds = RDBDataSourceFactory.forJdbcUrl("jdbc:h2:mem:oaknodes-" + clusterNodeId, "sa", "");
+                return new DocumentMK.Builder().setRDBConnection(this.ds).getNodeStore();
             } catch (Exception e) {
                 return null;
             }
@@ -102,6 +105,13 @@ public abstract class NodeStoreFixture {
             if (nodeStore instanceof DocumentNodeStore) {
                 ((DocumentNodeStore) nodeStore).dispose();
             }
+            if (this.ds instanceof Closeable) {
+                try {
+                    ((Closeable)this.ds).close();
+                } catch (IOException ex) {
+                    throw new RuntimeException(ex);
+                }
+            }
         }
     };
 



RE: svn commit: r1586296 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NodeStoreFixture.java

Posted by Marcel Reutegger <mr...@adobe.com>.
Hi,

this does not compile with Java 7:

java: org.apache.jackrabbit.oak.plugins.document.rdb.RDBDataSourceFactory.CloseableDataSource is not abstract and does not override abstract method getParentLogger() in javax.sql.CommonDataSource

I suggest we add the method even though it doesn't exist in Java 6.

Regards
 Marcel

> -----Original Message-----
> From: reschke@apache.org [mailto:reschke@apache.org]
> Sent: Donnerstag, 10. April 2014 15:31
> To: oak-commits@jackrabbit.apache.org
> Subject: svn commit: r1586296 - in /jackrabbit/oak/trunk: oak-
> core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDB
> DataSourceFactory.java oak-
> jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NodeStoreFixture.java
> 
> Author: reschke
> Date: Thu Apr 10 13:31:15 2014
> New Revision: 1586296
> 
> URL: http://svn.apache.org/r1586296
> Log:
> OAK-1266 - make sure that the test DataSource is closed at the end of the
> test
> 
> Modified:
>     jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDB
> DataSourceFactory.java
>     jackrabbit/oak/trunk/oak-
> jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NodeStoreFixture.java
> 
> Modified: jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDB
> DataSourceFactory.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDB
> DataSourceFactory.java?rev=1586296&r1=1586295&r2=1586296&view=diff
> ==========================================================
> ====================
> --- jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDB
> DataSourceFactory.java (original)
> +++ jackrabbit/oak/trunk/oak-
> core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDB
> DataSourceFactory.java Thu Apr 10 13:31:15 2014
> @@ -16,6 +16,10 @@
>   */
>  package org.apache.jackrabbit.oak.plugins.document.rdb;
> 
> +import java.io.Closeable;
> +import java.io.IOException;
> +import java.io.PrintWriter;
> +import java.sql.Connection;
>  import java.sql.Driver;
>  import java.sql.DriverManager;
>  import java.sql.SQLException;
> @@ -35,9 +39,70 @@ public class RDBDataSourceFactory {
>              bds.setUsername(username);
>              bds.setPassword(passwd);
>              bds.setUrl(url);
> -            return bds;
> +            return new CloseableDataSource(bds);
>          } catch (SQLException ex) {
>              throw new MicroKernelException("trying to obtain driver for " + url,
> ex);
>          }
>      }
> +
> +    /**
> +     * A {@link Closeable} {@link DataSource} based on a {@link
> BasicDataSource}.
> +     */
> +    private static class CloseableDataSource implements DataSource,
> Closeable {
> +
> +        private BasicDataSource ds;
> +
> +        public CloseableDataSource(BasicDataSource ds) {
> +            this.ds = ds;
> +        }
> +
> +        @Override
> +        public PrintWriter getLogWriter() throws SQLException {
> +            return this.ds.getLogWriter();
> +        }
> +
> +        @Override
> +        public int getLoginTimeout() throws SQLException {
> +            return this.ds.getLoginTimeout();
> +        }
> +
> +        @Override
> +        public void setLogWriter(PrintWriter pw) throws SQLException {
> +            this.ds.setLogWriter(pw);
> +        }
> +
> +        @Override
> +        public void setLoginTimeout(int t) throws SQLException {
> +            this.ds.setLoginTimeout(t);
> +        }
> +
> +        @Override
> +        public boolean isWrapperFor(Class<?> c) throws SQLException {
> +            return this.ds.isWrapperFor(c);
> +        }
> +
> +        @Override
> +        public <T> T unwrap(Class<T> c) throws SQLException {
> +            return this.unwrap(c);
> +        }
> +
> +        @Override
> +        public void close() throws IOException {
> +            try {
> +                this.ds.close();
> +            } catch (SQLException ex) {
> +                throw new IOException("closing data source " + this.ds, ex);
> +            }
> +        }
> +
> +        @Override
> +        public Connection getConnection() throws SQLException {
> +            return this.ds.getConnection();
> +        }
> +
> +        @Override
> +        public Connection getConnection(String user, String passwd) throws
> SQLException {
> +            return this.ds.getConnection(user, passwd);
> +        }
> +    }
>  }
> 
> Modified: jackrabbit/oak/trunk/oak-
> jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NodeStoreFixture.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-
> jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NodeStoreFixture.java?rev=
> 1586296&r1=1586295&r2=1586296&view=diff
> ==========================================================
> ====================
> --- jackrabbit/oak/trunk/oak-
> jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NodeStoreFixture.java
> (original)
> +++ jackrabbit/oak/trunk/oak-
> jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NodeStoreFixture.java Thu
> Apr 10 13:31:15 2014
> @@ -24,8 +24,6 @@ import java.util.UUID;
> 
>  import javax.sql.DataSource;
> 
> -import com.mongodb.DB;
> -
>  import org.apache.jackrabbit.mk.core.MicroKernelImpl;
>  import org.apache.jackrabbit.oak.kernel.KernelNodeStore;
>  import org.apache.jackrabbit.oak.plugins.document.DocumentMK;
> @@ -38,6 +36,8 @@ import org.apache.jackrabbit.oak.plugins
>  import org.apache.jackrabbit.oak.spi.blob.BlobStore;
>  import org.apache.jackrabbit.oak.spi.state.NodeStore;
> 
> +import com.mongodb.DB;
> +
>  /**
>   * NodeStore fixture for parametrized tests.
>   */
> @@ -50,7 +50,7 @@ public abstract class NodeStoreFixture {
>          public NodeStore createNodeStore() {
>              return new CloseableNodeStore(new DocumentMK.Builder().open());
>          }
> -
> +
>          @Override
>          public NodeStore createNodeStore(int clusterNodeId) {
>              MongoConnection connection;
> @@ -80,18 +80,21 @@ public abstract class NodeStoreFixture {
>      public static final NodeStoreFixture DOCUMENT_NS =
> createDocumentFixture("mongodb://localhost:27017/oak");
> 
>      public static final NodeStoreFixture DOCUMENT_JDBC = new
> NodeStoreFixture() {
> +
> +        private DataSource ds;
> +
>          @Override
>          public NodeStore createNodeStore() {
>              String id = UUID.randomUUID().toString();
> -            DataSource ds = RDBDataSourceFactory.forJdbcUrl("jdbc:h2:mem:" +
> id, "sa", "");
> -            return new
> DocumentMK.Builder().setRDBConnection(ds).getNodeStore();
> +            this.ds = RDBDataSourceFactory.forJdbcUrl("jdbc:h2:mem:" + id, "sa",
> "");
> +            return new
> DocumentMK.Builder().setRDBConnection(this.ds).getNodeStore();
>          }
> 
>          @Override
>          public NodeStore createNodeStore(int clusterNodeId) {
>              try {
> -                DataSource ds =
> RDBDataSourceFactory.forJdbcUrl("jdbc:h2:mem:oaknodes-" +
> clusterNodeId, "sa", "");
> -                return new
> DocumentMK.Builder().setRDBConnection(ds).getNodeStore();
> +                this.ds =
> RDBDataSourceFactory.forJdbcUrl("jdbc:h2:mem:oaknodes-" +
> clusterNodeId, "sa", "");
> +                return new
> DocumentMK.Builder().setRDBConnection(this.ds).getNodeStore();
>              } catch (Exception e) {
>                  return null;
>              }
> @@ -102,6 +105,13 @@ public abstract class NodeStoreFixture {
>              if (nodeStore instanceof DocumentNodeStore) {
>                  ((DocumentNodeStore) nodeStore).dispose();
>              }
> +            if (this.ds instanceof Closeable) {
> +                try {
> +                    ((Closeable)this.ds).close();
> +                } catch (IOException ex) {
> +                    throw new RuntimeException(ex);
> +                }
> +            }
>          }
>      };
> 
> 


Re: svn commit: r1586296 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NodeStoreFixture.java

Posted by Julian Reschke <ju...@gmx.de>.
On 2014-04-10 16:22, Julian Reschke wrote:
> On 2014-04-10 16:19, Marcel Reutegger wrote:
>> this also looks a bit strange. doesn't this end in an endless loop?
>>
>> regards
>>   marcel
>>
>>> +        @Override
>>> +        public <T> T unwrap(Class<T> c) throws SQLException {
>>> +            return this.unwrap(c);
>>> +        }
>
> Oops.

(fixed)


Re: svn commit: r1586296 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NodeStoreFixture.java

Posted by Julian Reschke <ju...@gmx.de>.
On 2014-04-10 16:19, Marcel Reutegger wrote:
> this also looks a bit strange. doesn't this end in an endless loop?
>
> regards
>   marcel
>
>> +        @Override
>> +        public <T> T unwrap(Class<T> c) throws SQLException {
>> +            return this.unwrap(c);
>> +        }

Oops.


RE: svn commit: r1586296 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NodeStoreFixture.java

Posted by Marcel Reutegger <mr...@adobe.com>.
this also looks a bit strange. doesn't this end in an endless loop?

regards
 marcel

> +        @Override
> +        public <T> T unwrap(Class<T> c) throws SQLException {
> +            return this.unwrap(c);
> +        }