We have trouble using Javamelody with a Tomcat9 JNDI datasource.
Javamelody seems to be unable to rebind the datasource due to a "read only" context (see debug log below).
Datasource definition in global context.xml
:
<Resource
name="jdbc/myDS"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@my-db-host:1521:mydb"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
... />
This has worked before, but some upgrade broke it. Potential candidates: Tomcat, Javamelody, JDBC driver.
What has also changed was the factory
. Due to other DB related issues, we had to move from Tomcat's default DBCP2 to the DataSourceFactory
.
Any help appreciated.
Debug-Log of Javamelody when starting the application:
2022-12-09T14:07:50,438 DEBUG main net.bull.javamelody:59 - JavaMelody listener init started
2022-12-09T14:07:50,456 DEBUG main net.bull.javamelody:59 - datasources found in JNDI: [java:comp/env/jdbc/myDS, java:comp/env/jdbc/iiqDS]
2022-12-09T14:07:50,468 DEBUG main net.bull.javamelody:65 - rebinding datasource java:comp/env/jdbc/myDS failed, skipping it
javax.naming.OperationNotSupportedException: Context is read only
at org.apache.naming.NamingContext.checkWritable(NamingContext.java:1002) ~[catalina.jar:9.0.68]
at org.apache.naming.NamingContext.bind(NamingContext.java:920) ~[catalina.jar:9.0.68]
at org.apache.naming.NamingContext.rebind(NamingContext.java:230) ~[catalina.jar:9.0.68]
at org.apache.naming.NamingContext.rebind(NamingContext.java:246) ~[catalina.jar:9.0.68]
at org.apache.naming.SelectorContext.rebind(SelectorContext.java:237) ~[catalina.jar:9.0.68]
at javax.naming.InitialContext.rebind(InitialContext.java:425) ~[?:?]
at net.bull.javamelody.JdbcWrapperHelper.rebindDataSource(JdbcWrapperHelper.java:128) ~[javamelody-core-1.91.0.jar:1.91.0]
at net.bull.javamelody.JdbcWrapper.rebindDataSources(JdbcWrapper.java:479) [javamelody-core-1.91.0.jar:1.91.0]
at net.bull.javamelody.SessionListener.contextInitialized(SessionListener.java:329) [javamelody-core-1.91.0.jar:1.91.0]
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4769) [catalina.jar:9.0.68]
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5231) [catalina.jar:9.0.68]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:9.0.68]
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:726) [catalina.jar:9.0.68]
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:698) [catalina.jar:9.0.68]
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:696) [catalina.jar:9.0.68]
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1024) [catalina.jar:9.0.68]
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1911) [catalina.jar:9.0.68]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) [tomcat-util.jar:9.0.68]
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118) [?:?]
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:825) [catalina.jar:9.0.68]
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:475) [catalina.jar:9.0.68]
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1618) [catalina.jar:9.0.68]
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:319) [catalina.jar:9.0.68]
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) [catalina.jar:9.0.68]
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423) [catalina.jar:9.0.68]
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366) [catalina.jar:9.0.68]
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:946) [catalina.jar:9.0.68]
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:835) [catalina.jar:9.0.68]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:9.0.68]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396) [catalina.jar:9.0.68]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386) [catalina.jar:9.0.68]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) [tomcat-util.jar:9.0.68]
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140) [?:?]
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919) [catalina.jar:9.0.68]
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:265) [catalina.jar:9.0.68]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:9.0.68]
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:432) [catalina.jar:9.0.68]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:9.0.68]
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930) [catalina.jar:9.0.68]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:9.0.68]
at org.apache.catalina.startup.Catalina.start(Catalina.java:772) [catalina.jar:9.0.68]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345) [bootstrap.jar:9.0.68]
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476) [bootstrap.jar:9.0.68]