Got an odd possible bug.
v8.1 to v8.3 conversion testing. Client has a PostgreSQL cluster with two distinct databases. Both URLs point at the same IP and port--just the DB name is different:
jdbc:postgresql://a.b.c.d:5432/db1?ssl=true&sslmode=require&sslfactory=org.postgresql.ssl.NonValidatingFactoryjdbc:postgresql://a.b.c.d:5432/db2?ssl=true&sslmode=require&sslfactory=org.postgresql.ssl.NonValidatingFactory
(Names changed. Notable possible difference: "db2" includes some uppercase characters.)
First connection works reliably.
Second connection gives me this:
java.sql.SQLException: Cannot load JDBC driver class 'org.postgresql.Driver'
at org.apache.commons.dbcp2.DriverFactory.createDriver(DriverFactory.java:53)
at org.apache.commons.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:474)
at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:541)
at org.apache.commons.dbcp2.BasicDataSource.getLogWriter(BasicDataSource.java:1088)
at org.apache.commons.dbcp2.BasicDataSourceFactory.createDataSource(BasicDataSourceFactory.java:330)
at com.inductiveautomation.ignition.gateway.datasource.DatasourceManagerImpl.createDataSource(DatasourceManagerImpl.java:259)
at com.inductiveautomation.ignition.gateway.IgnitionGateway.createDataSource(IgnitionGateway.java:2914)
at com.inductiveautomation.ignition.gateway.datasource.DatasourceImpl.initializeDatasource(DatasourceImpl.java:285)
at com.inductiveautomation.ignition.gateway.datasource.DatasourceImpl.runTest(DatasourceImpl.java:312)
at com.inductiveautomation.ignition.gateway.datasource.DatasourceManagerImpl$FaultedDatasourceRetryer.lambda$newRetryRunnable$0(DatasourceManagerImpl.java:1318)
at com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$TrackedTask.run(BasicExecutionEngine.java:599)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.postgresql.Driver
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
at org.eclipse.jetty.ee10.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:443)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
at org.apache.commons.dbcp2.DriverFactory.createDriver(DriverFactory.java:48)
at org.apache.commons.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:474)
at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:541)
at org.apache.commons.dbcp2.BasicDataSource.getLogWriter(BasicDataSource.java:1088)
at org.apache.commons.dbcp2.BasicDataSourceFactory.createDataSource(BasicDataSourceFactory.java:330)
at com.inductiveautomation.ignition.gateway.datasource.DatasourceManagerImpl.createDataSource(DatasourceManagerImpl.java:259)
at com.inductiveautomation.ignition.gateway.IgnitionGateway.createDataSource(IgnitionGateway.java:2914)
at com.inductiveautomation.ignition.gateway.datasource.DatasourceImpl.initializeDatasource(DatasourceImpl.java:285)
at com.inductiveautomation.ignition.gateway.datasource.DatasourceImpl.runTest(DatasourceImpl.java:312)
at com.inductiveautomation.ignition.gateway.datasource.DatasourceManagerImpl$FaultedDatasourceRetryer.lambda$newRetryRunnable$0(DatasourceManagerImpl.java:1318)
at com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$TrackedTask.run(BasicExecutionEngine.java:599)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
???