user434290
user434290

Reputation: 63

How do I avoid JAR Collision with multiple JDBC drivers in Eclipse on connect?

My code is calling two different somewhat obscure JDBC connections. These JARS are related to Jethro and Impala, but I do not think it matters for this question. If I add the external JAR for Jethro alone it works. Same for Impala. However, if I add both the Jethro and Impala external jars I seem to get a collision. I want to be able to call either JDBC library in the same program space. The following exception occurs:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/thrift/protocol/TProtocol
    at com.cloudera.impala.impala.core.ImpalaJDBCDriver.<clinit>(ImpalaJDBCDriver.java:24)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at com.cloudera.impala.dsi.core.impl.DSIDriverFactory.createDriver(DSIDriverFactory.java:52)
    at com.cloudera.impala.jdbc.common.AbstractDriver.doInitialize(AbstractDriver.java:471)
    at com.cloudera.impala.jdbc.common.AbstractDriver.connect(AbstractDriver.java:207)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at TestConnect.main(TestConnect.java:20)
Caused by: java.lang.ClassNotFoundException: org.apache.thrift.protocol.TProtocol
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

Upvotes: 1

Views: 398

Answers (1)

user434290
user434290

Reputation: 63

This got fixed. Essentially I did not have all the dependent JAR's for Impala. I thought that would not matter as I was calling Jethro. It did matter.

Adding the following jars did make it work. Score one for Maven. If I used Maven this would not have happened. Here are the dependent JARS's for posterity sake:

  • libfb303
  • libthrift
  • log4j
  • TCLIServiceClient

Upvotes: 3

Related Questions