-BEGIN PGP SIGNED MESSAGE-
Hash: SHA256
Adam,
On 10/9/19 20:59, Adam Rauch wrote:
> When attempting to connect to a DataSource that specifies a
> database that doesn't exist, Tomcat 8.5.46 throws an informative
> SQLException; for example: java.sql.SQLException: Cannot create
> PoolableConnectionFactory (FATAL: database "labkey19.3" does not
> exist)
>
> In the same situation, Tomcat 7.0.96 throws a NullPointerException
> with no useful information.
>
> I expect an exception, but the 8.5.46/DBCP2 behavior is obviously
> preferable, since it gives administrators a better understanding
> of what's gone wrong. Seems like a DBCP 1.x bug (not a Tomcat bug)
> and I wouldn't consider it a high priority to fix (our product
> recovers just fine in either case and we recommend Tomcat 9.0.x
> these days), but the discrepancy seemed worth mentioning here.
>
> Full stack traces below. Our code is simply:
>
> try (Connection conn = dataSource.getConnection()) { ... }
>
> Thanks, Adam
Sounds like a bona-fide bug. Can you please file this in Bugzilla?
- -chris
>
> Tomcat 7.0.96
>
> java.lang.NullPointerException at
> org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.destroyObject(Po
olableConnectionFactory.java:643)
>
> at
> org.apache.tomcat.dbcp.dbcp.BasicDataSource.validateConnectionFactory(
BasicDataSource.java:1738)
>
> at
> org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFa
ctory(BasicDataSource.java:1721)
>
> at
> org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicData
Source.java:1486)
>
> at
> org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSou
rce.java:1103)
>
> at org.labkey.api.data.DbScope.(DbScope.java:337) at
> org.labkey.api.data.DbScope.addScope(DbScope.java:1275) at
> org.labkey.api.data.DbScope.initializeScopes(DbScope.java:1243) at
> org.labkey.api.module.ModuleLoader.initializeDataSources(ModuleLoader.
java:1004)
>
> at
> org.labkey.api.module.ModuleLoader.doInit(ModuleLoader.java:352) at
> org.labkey.api.module.ModuleLoader.init(ModuleLoader.java:249) at
> org.apache.catalina.core.ApplicationFilterConfig.initFilter(Applicatio
nFilterConfig.java:285)
>
> at
> org.apache.catalina.core.ApplicationFilterConfig.getFilter(Application
FilterConfig.java:266)
>
> at
> org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFil
terConfig.java:108)
>
> at
> org.apache.catalina.core.StandardContext.filterStart(StandardContext.j
ava:5037)
>
> at
> org.apache.catalina.core.StandardContext.startInternal(StandardContext
.java:5739)
>
> at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
>
>
at
> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.
java:1018)
>
> at
> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:994
)
>
>
at
> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:662)
>
>
at
> org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.jav
a:712)
>
> at
> org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig
.java:2002)
>
> at
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executor
s.java:515)
>
> at
> java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.jav
a:264)
>
> at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool
Executor.java:1128)
>
> at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo
lExecutor.java:628)
>
> at java.base/java.lang.Thread.run(Thread.java:830)
>
> Tomcat 8.5.46
>
> java.sql.SQLException: Cannot create PoolableConnectionFactory
> (FATAL: database "labkey19.3" does not exist) at
> org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createPoolableConnectionF
actory(BasicDataSource.java:669)
>
> at
> org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDat
aSource.java:544)
>
> at
> org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSo
urce.java:753)
>
> at org.labkey.api.data.DbScope.(DbScope.java:337) at
> org.labkey.api.data.DbScope.addScope(DbScope.java:1275) at
> org.labkey.api.data.DbScope.initializeScopes(DbScope.java:1243) at
> org.labkey.api.module.ModuleLoader.initializeDataSources(ModuleLoader.
java:1004)
>
> at
> org.labkey.api.module.ModuleLoader.doInit(ModuleLoader.java:352) at
> org.labkey.api.module.ModuleLoader.init(ModuleLoader.java:249) at
> org.apache.catalina.core.ApplicationFilterConfig.initFilter(Applicatio
nFilterConfig.java:283)
>
> at
> org.apache.catalina.core.ApplicationFilterConfig.getFilter(Application
FilterConfig.java:264)
>
> at
> org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFil
terConfig.java:108)
>
> at
> org.apache.catalina.core.StandardContext.filterStart(StandardContext.j
ava:4546)
>
> at
> org.apache.catalina.core.StandardContext.startInternal(StandardContext
.java:5191)
>
> at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
>
>
at
> org.a