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: resc...@apache.org [mailto:resc...@apache.org] > Sent: Donnerstag, 10. April 2014 15:31 > To: oak-comm...@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); > + } > + } > } > }; > >