You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-dev@jackrabbit.apache.org by Marcel Reutegger <mr...@adobe.com> on 2014/04/10 16:11:05 UTC

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

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);
> +                }
> +            }
>          }
>      };
> 
>