Skip to content

Commit

Permalink
reject singleton ConnectionProvider when given to NonBlockingConnecti…
Browse files Browse the repository at this point in the history
…onPool builder #34
  • Loading branch information
davidmoten committed Nov 8, 2018
1 parent 1d2aedf commit e0fd757
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import javax.annotation.Nonnull;

import org.davidmoten.rx.jdbc.exceptions.SQLRuntimeException;
import org.davidmoten.rx.jdbc.internal.SingletonConnectionProvider;

import com.github.davidmoten.guavamini.Preconditions;

Expand Down Expand Up @@ -44,19 +45,8 @@ public interface ConnectionProvider {
* @return singleton connection provider (don't use with connection pools!)
*/
static ConnectionProvider from(@Nonnull Connection connection) {
Preconditions.checkNotNull(connection, "connection cannot be null");
return new ConnectionProvider() {

@Override
public Connection get() {
return connection;
}

@Override
public void close() {
// do nothing as con was not created by this provider
}
};
Preconditions.checkNotNull(connection, "connection cannot be null");
return new SingletonConnectionProvider(connection);
}

static ConnectionProvider from(@Nonnull String url) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.davidmoten.rx.jdbc.internal;

import java.sql.Connection;

import org.davidmoten.rx.jdbc.ConnectionProvider;

public final class SingletonConnectionProvider implements ConnectionProvider {

private final Connection connection;

public SingletonConnectionProvider(Connection connection) {
this.connection = connection;
}

@Override
public Connection get() {
return connection;
}

@Override
public void close() {
// do nothing as con was not created by this provider
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

import org.davidmoten.rx.jdbc.ConnectionProvider;
import org.davidmoten.rx.jdbc.Util;
import org.davidmoten.rx.jdbc.internal.SingletonConnectionProvider;
import org.davidmoten.rx.jdbc.pool.internal.HealthCheckPredicate;
import org.davidmoten.rx.jdbc.pool.internal.PooledConnection;
import org.davidmoten.rx.jdbc.pool.internal.SerializedConnectionListener;
Expand Down Expand Up @@ -69,6 +70,10 @@ public Builder(Function<NonBlockingConnectionPool, T> transform) {
* @return this
*/
public Builder<T> connectionProvider(ConnectionProvider cp) {
Preconditions.checkArgument(!(cp instanceof SingletonConnectionProvider), //
"connection provider should not return a singleton connection because " //
+ "a pool needs control over the creation and closing of connections. " //
+ "Use ConnectionProvider.from(url,...) instead.");
this.cp = cp;
return this;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.davidmoten.rx.jdbc.pool;

import java.sql.Connection;

import org.davidmoten.rx.jdbc.ConnectionProvider;
import org.junit.Test;
import org.mockito.Mockito;

public class NonBlockingConnectionPoolTest {

@Test(expected = IllegalArgumentException.class)
public void testRejectSingletonConnectionProvider() {
Connection con = Mockito.mock(Connection.class);
NonBlockingConnectionPool.builder().connectionProvider(ConnectionProvider.from(con));
}

}

0 comments on commit e0fd757

Please sign in to comment.