I'm having class loading issues that go away when I revert the changes in our use of Class.forName added in https://github.com/apache/beam/pull/4674. The problem I'm having is that the typical JDBC GUI (SqlWorkbench/J, SQuirreL SQL) creates an isolated class loader to load our library. Things work if we call Class.forName with the default class loader [getClass().getClassLoader() or no argument] but not if we use the thread context class loader [Thread.currentThread().getContextClassLoader() or ReflectHelpers.findClassLoader()]. Why is using the default class loader not the right thing to do? How can I fix this problem?
See this integration test for an example: https://github.com/apilloud/beam/blob/directrunner/sdks/java/extensions/sql/jdbc/src/test/java/org/apache/beam/sdk/extensions/sql/jdbc/JdbcIT.java#L44 https://scans.gradle.com/s/iquqinhns2ymi/tests/slmg6ytuuqlus-akh5xpgshj32k Andrew