Closed jagdishkulkarni closed 4 years ago
@safris Oracle ojdbc doesn't support registering after deregistering, It will throw exception.
Caused by: java.lang.IllegalStateException: Timer already cancelled.
at java.util.Timer.sched(Timer.java:398) ~[?:?]
at java.util.Timer.schedule(Timer.java:194) ~[?:?]
at oracle.net.nt.TimeoutInterruptHandler.scheduleInterrupt(TimeoutInterruptHandler.java:90) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
at oracle.net.nt.TimeoutInterruptHandler.scheduleInterrupt(TimeoutInterruptHandler.java:103) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
at oracle.net.nt.TimeoutSocketChannel.scheduleInterrupt(TimeoutSocketChannel.java:235) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
at oracle.net.nt.TimeoutSocketChannel.connect(TimeoutSocketChannel.java:97) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
at oracle.net.nt.TimeoutSocketChannel.<init>(TimeoutSocketChannel.java:77) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:192) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
at oracle.net.nt.ConnOption.connect(ConnOption.java:174) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:510) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:548) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:682) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:309) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1596) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:588) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:793) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:57) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:747) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:562) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
A regression introduced by https://github.com/opentracing-contrib/java-jdbc/pull/51
Any specific reason why we are deregistering other driver's and reregistering it again?
Because interceptor mode need TracingDriver be the first driver, so it can accepts any jdbc url then delegate to the real driver, It's a pity that DriverManager doesn't provide a mechanism to control drivers order.
A regression introduced by #51
I suggest not try to deregister and register again because some drivers are one-off, leave it to the application to make sure TracingDriver is registered first since they must call setInterceptorMode(true) somewhere, for example before a servlet context initialized.
@Override
public void contextInitialized(ServletContextEvent event) {
io.opentracing.contrib.jdbc.TracingDriver.setInterceptorMode(true);
}
we could add an instruction in https://github.com/opentracing-contrib/java-jdbc#interceptor. WDYT @safris
Hello, I am currently facing this specific issue. Is there any fix (or workaround) for Tracing with Oracle ojdbc?
specs: spring-boot: 2.3.0 ojdbc10: 19.3.0.0 opentracing-jdbc:0.2.8 (from opentracing-spring-cloud-jdbc-starter: 0.5.4) flyway-core:6.4.1
Thanks!
@safris Oracle ojdbc doesn't support registering after deregistering, It will throw exception.
Caused by: java.lang.IllegalStateException: Timer already cancelled. at java.util.Timer.sched(Timer.java:398) ~[?:?] at java.util.Timer.schedule(Timer.java:194) ~[?:?] at oracle.net.nt.TimeoutInterruptHandler.scheduleInterrupt(TimeoutInterruptHandler.java:90) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.net.nt.TimeoutInterruptHandler.scheduleInterrupt(TimeoutInterruptHandler.java:103) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.net.nt.TimeoutSocketChannel.scheduleInterrupt(TimeoutSocketChannel.java:235) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.net.nt.TimeoutSocketChannel.connect(TimeoutSocketChannel.java:97) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.net.nt.TimeoutSocketChannel.<init>(TimeoutSocketChannel.java:77) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:192) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.net.nt.ConnOption.connect(ConnOption.java:174) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:510) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:548) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:682) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.net.ns.NSProtocol.connect(NSProtocol.java:309) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1596) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:588) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:793) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:57) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:747) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0] at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:562) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
Right, Oracle throws Timeout exception
@jagdishkulkarni This issue is resolved in v0.2.11, you can try it.
@jagdishkulkarni This issue is resolved in v0.2.11, you can try it.
Thank you. Will test and confirm.
I can confirm that it works with version 0.2.11
Confirming that updating to version 0.2.11
resolved the issue.
Its working after upgrading to version 0.2.11
Any specific reason why we are deregistering other driver's and reregistering it again?