SAP / kafka-connect-sap

Kafka Connect SAP is a set of connectors, using the Apache Kafka Connect framework for reliably connecting Kafka with SAP systems
Apache License 2.0
122 stars 56 forks source link

java.lang.ClassNotFoundException: com.sap.db.jdbc.Driver #96

Closed ThomasDangleterre closed 3 years ago

ThomasDangleterre commented 3 years ago

Hello,

I try to run a source connector on Kafka Connect

here is my docker image

FROM confluentinc/cp-kafka-connect:6.2.0
RUN confluent-hub install --no-prompt splunk/kafka-connect-splunk:2.0.2
RUN confluent-hub install --no-prompt confluentinc/kafka-connect-s3:10.0.1

COPY ./target/ /usr/share/java/
COPY kafka-connector-hana_2.13-0.9.1.jar /usr/share/java/kafka-connector-hana_2.13-0.9.1.jar

target directory only contains ngdbc-2.9.16.jar before docker build

i'm getting a ClassNotFoundException when creating a source connector :

ERROR WorkerSourceTask{id=stockmvt-hana-source-connect-5-0} Task threw an uncaught and unrecoverable exception. Task is being killed and will not recover until manually restarted (org.apache.kafka.connect.runtime.WorkerTask)
java.lang.ClassNotFoundException: com.sap.db.jdbc.Driver
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
    at org.apache.kafka.connect.runtime.isolation.PluginClassLoader.loadClass(PluginClassLoader.java:104)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:315)
    at com.sap.kafka.client.hana.HANAJdbcClient.$anonfun$getConnection$1(HANAJdbcClient.scala:75)
    at com.sap.kafka.utils.ExecuteWithExceptions$.apply(ExecuteWithExceptions.scala:40)
    at com.sap.kafka.client.hana.HANAJdbcClient.getConnection(HANAJdbcClient.scala:71)
    at com.sap.kafka.connect.source.hana.HANASourceTask.getTables(HANASourceTask.scala:29)
    at com.sap.kafka.connect.source.GenericSourceTask.start(GenericSourceTask.scala:65)
    at org.apache.kafka.connect.runtime.WorkerSourceTask.execute(WorkerSourceTask.java:224)
    at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:182)
    at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:231)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)

It seems like Driver class is not accessible but logs indicate us that the jar is correctly loaded

[2021-09-17 12:23:44,772] INFO Loading plugin from: /usr/share/java/ngdbc-2.9.16.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2021-09-17 12:23:44,887] INFO Registered loader: PluginClassLoader{pluginLocation=file:/usr/share/java/ngdbc-2.9.16.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)

Could you tell me if there is a way to run Hana connector on Kafka Connect instead of Debezium ?

elakito commented 3 years ago

@Thomas-Dangleterre In the examples folder, you can find several docker based examples (e.g., persions1ds, etc), take one of them and follow its README that describe how to build the respective docker image and make sure both the connector jar kafka-connector-hana_xxx.jar and ngdbc-2.9.16.jar are placed in a folder within the plugins folder specified for you connect instance. You shouldn't be loading the connector's jars from the shared base jars folder.

elakito commented 3 years ago

I'm closing this ticket, as I suppose the the class loading issue has been resolved by placing the driver jar file in the plugin folder in the docker file.

ThomasDangleterre commented 3 years ago

Yes, sorry for the late answer.

Thank you