Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

closed connection issue #29

Closed
adorearun opened this issue Aug 29, 2018 · 9 comments
Closed

closed connection issue #29

adorearun opened this issue Aug 29, 2018 · 9 comments
Labels

Comments

@adorearun
Copy link

I am getting below error intermittently , is there something i am missing

java.sql.SQLException: Closed Connection
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) ~[ojdbc14-10.2.0.4.0.jar:Oracle JDBC Driver version - "10.2.0.4.0"]
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) ~[ojdbc14-10.2.0.4.0.jar:Oracle JDBC Driver version - "10.2.0.4.0"]
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208) ~[ojdbc14-10.2.0.4.0.jar:Oracle JDBC Driver version - "10.2.0.4.0"]
	at oracle.jdbc.driver.OracleStatement.ensureOpen(OracleStatement.java:3544) ~[ojdbc14-10.2.0.4.0.jar:Oracle JDBC Driver version - "10.2.0.4.0"]
	at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3351) ~[ojdbc14-10.2.0.4.0.jar:Oracle JDBC Driver version - "10.2.0.4.0"]
	at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3415) ~[ojdbc14-10.2.0.4.0.jar:Oracle JDBC Driver version - "10.2.0.4.0"]
	at org.davidmoten.rx.jdbc.pool.internal.ConnectionNonBlockingMemberPreparedStatement.executeQuery(ConnectionNonBlockingMemberPreparedStatement.java:55) ~[rxjava2-jdbc-0.1-RC35.jar:na]
	at org.davidmoten.rx.jdbc.Select.lambda$create$5(Select.java:72) ~[rxjava2-jdbc-0.1-RC35.jar:na]
	at io.reactivex.internal.operators.flowable.FlowableGenerate.subscribeActual(FlowableGenerate.java:45) ~[rxjava-2.1.16.jar:na]
	at io.reactivex.Flowable.subscribe(Flowable.java:14419) ~[rxjava-2.1.16.jar:na]
	at io.reactivex.Flowable.subscribe(Flowable.java:14365) ~[rxjava-2.1.16.jar:na]
	at io.reactivex.internal.operators.flowable.FlowableScalarXMap$ScalarXMapFlowable.subscribeActual(FlowableScalarXMap.java:160) ~[rxjava-2.1.16.jar:na]
	at io.reactivex.Flowable.subscribe(Flowable.java:14419) ~[rxjava-2.1.16.jar:na]
	at io.reactivex.Flowable.subscribe(Flowable.java:14365) ~[rxjava-2.1.16.jar:na]
	at io.reactivex.internal.operators.flowable.FlowableUsing.subscribeActual(FlowableUsing.java:74) ~[rxjava-2.1.16.jar:na]
	at io.reactivex.Flowable.subscribe(Flowable.java:14419) ~[rxjava-2.1.16.jar:na]
	at io.reactivex.Flowable.subscribe(Flowable.java:14365) ~[rxjava-2.1.16.jar:na]
	at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.onNext(FlowableFlatMap.java:163) ~[rxjava-2.1.16.jar:na]
	at io.reactivex.internal.subscriptions.DeferredScalarSubscription.complete(DeferredScalarSubscription.java:133) ~[rxjava-2.1.16.jar:na]
	at io.reactivex.internal.operators.single.SingleToFlowable$SingleToFlowableObserver.onSuccess(SingleToFlowable.java:63) ~[rxjava-2.1.16.jar:na]
	at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onSuccess(SingleMap.java:64) ~[rxjava-2.1.16.jar:na]
	at org.davidmoten.rx.pool.MemberSingle$Emitter.run(MemberSingle.java:512) ~[rxjava2-pool-0.1-RC35.jar:na]
	at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker$BooleanRunnable.run(ExecutorScheduler.java:261) ~[rxjava-2.1.16.jar:na]
	at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker.run(ExecutorScheduler.java:226) ~[rxjava-2.1.16.jar:na]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_161]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_161]
	at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_161]

my DB configuration

Class.forName("oracle.jdbc.driver.OracleDriver");
             Connection connection = DriverManager.getConnection(
                     "URL",
                     "user",
                     "pas");
             
            
             NonBlockingConnectionPool pool =
                     Pools.nonBlocking()
                     		
                             .maxPoolSize(Runtime.getRuntime().availableProcessors() * 5)
                             .connectionProvider(ConnectionProvider.from(connection)).healthCheck(DatabaseType.ORACLE).idleTimeBeforeHealthCheck(5, TimeUnit.SECONDS)
                             .createRetryInterval(5, TimeUnit.SECONDS)
                             .build();
             con = connection;
             return Database.from(pool);
@davidmoten
Copy link
Owner

Thanks for the report, I'll have a think about it.

@davidmoten
Copy link
Owner

You're using the latest version?

@adorearun
Copy link
Author

<dependency>
			<groupId>com.github.davidmoten</groupId>
			<artifactId>rxjava2-jdbc</artifactId>
			<version>0.1-RC35</version>
		</dependency>
		<dependency>
			<groupId>com.oracle</groupId>
			<artifactId>ojdbc14</artifactId>
			<version>10.2.0.4.0</version>
		</dependency>

Also lately i am getting below issue as well, can you please shed some light on this as well?

Exception in thread "pool-1-thread-5" io.reactivex.exceptions.UndeliverableException: java.sql.SQLException: Closed Statement: next
	at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:367)
	at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.innerError(FlowableFlatMap.java:607)
	at io.reactivex.internal.operators.flowable.FlowableFlatMap$InnerSubscriber.onError(FlowableFlatMap.java:668)
	at io.reactivex.internal.operators.flowable.FlowableUsing$UsingSubscriber.onError(FlowableUsing.java:125)
	at io.reactivex.internal.operators.flowable.FlowableGenerate$GeneratorSubscription.onError(FlowableGenerate.java:189)
	at io.reactivex.internal.operators.flowable.FlowableGenerate$GeneratorSubscription.request(FlowableGenerate.java:114)
	at io.reactivex.internal.operators.flowable.FlowableUsing$UsingSubscriber.request(FlowableUsing.java:158)
	at io.reactivex.internal.operators.flowable.FlowableFlatMap$InnerSubscriber.onSubscribe(FlowableFlatMap.java:654)
	at io.reactivex.internal.operators.flowable.FlowableUsing$UsingSubscriber.onSubscribe(FlowableUsing.java:99)
	at io.reactivex.internal.operators.flowable.FlowableGenerate.subscribeActual(FlowableGenerate.java:52)
	at io.reactivex.Flowable.subscribe(Flowable.java:14419)
	at io.reactivex.Flowable.subscribe(Flowable.java:14365)
	at io.reactivex.internal.operators.flowable.FlowableScalarXMap$ScalarXMapFlowable.subscribeActual(FlowableScalarXMap.java:160)
	at io.reactivex.Flowable.subscribe(Flowable.java:14419)
	at io.reactivex.Flowable.subscribe(Flowable.java:14365)
	at io.reactivex.internal.operators.flowable.FlowableUsing.subscribeActual(FlowableUsing.java:74)
	at io.reactivex.Flowable.subscribe(Flowable.java:14419)
	at io.reactivex.Flowable.subscribe(Flowable.java:14365)
	at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.onNext(FlowableFlatMap.java:163)
	at io.reactivex.internal.subscriptions.DeferredScalarSubscription.complete(DeferredScalarSubscription.java:133)
	at io.reactivex.internal.operators.single.SingleToFlowable$SingleToFlowableObserver.onSuccess(SingleToFlowable.java:63)
	at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onSuccess(SingleMap.java:64)
	at org.davidmoten.rx.pool.MemberSingle$Emitter.run(MemberSingle.java:512)
	at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker$BooleanRunnable.run(ExecutorScheduler.java:261)
	at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker.run(ExecutorScheduler.java:226)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.sql.SQLException: Closed Statement: next
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
	at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:187)
	at org.davidmoten.rx.jdbc.Select.lambda$create$6(Select.java:77)
	at io.reactivex.internal.operators.flowable.FlowableInternalHelper$SimpleBiGenerator.apply(FlowableInternalHelper.java:62)
	at io.reactivex.internal.operators.flowable.FlowableInternalHelper$SimpleBiGenerator.apply(FlowableInternalHelper.java:53)
	at io.reactivex.internal.operators.flowable.FlowableGenerate$GeneratorSubscription.request(FlowableGenerate.java:109)
	... 22 more

@davidmoten
Copy link
Owner

Ah this is an easy one. You are passing in only one connection so you have a pool of one!

Either use Database.from(url) or the connection provider should look like

.connectionProvider(() -> DriverManager.getConnection(...))

@adorearun
Copy link
Author

Thank you , If I use Database.from(url) how should I pass user / pass ?

@davidmoten
Copy link
Owner

You can put the user and password in the url if you want

@davidmoten
Copy link
Owner

like this I think: url="jdbc:oracle:thin:username/password@localhost:1521:orcl".

@adorearun
Copy link
Author

Thank you David for the prompt response. I have one more question reg pool
Say using the above configuration mentioned I am querying the table of ~26k records in a select query.

  1. How many threads will be created?
  2. How many connections will be created ?
  3. How many records will be fetched in each thread like how split up works?

I need to figure out how my DB is loaded because of this operation? Can you please help me figure this out?

@davidmoten
Copy link
Owner

The deal is one connection from the pool per query and threading is completely up to you (will happen downstream of the Flowable returned by the select). Sounds like you may need to do a bit of reading on how RxJava Flowables work but I'm happy to clarify where needed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants