ngjaying opened a new issue #2900: NoClassDefFoundError error happens when 
running custom source connector on cluster
URL: https://github.com/apache/pulsar/issues/2900
 
 
   Run a custom source connector with dependency to eclipse paho is successful 
on localrun mode, but got java.lang.NoClassDefFoundError on cluster mode.
   
   #### Expected behavior
   Run the custom source connector successfully on cluster mode.
   
   #### Actual behavior
   Get below error in the function's log
   ```
   03:02:49,717 INFO [public/default/emxq_source_rule1] [instance-0] 
JavaInstanceRunnable - Starting Java Instance emxq_source_rule1
   03:02:49,726 INFO [public/default/emxq_source_rule1] [instance-0] 
JavaInstanceRunnable - Loading JAR files for function 
InstanceConfig(instanceId=0, functionId=d6925a98-b890-44ed-90df-29f9e0f7ea4c, 
functionVersion=0d3e23d5-5172-4003-a068-30d4eca6a72d, functionDetails=tenant: 
"public"
   namespace: "default"
   name: "emxq_source_rule1"
   className: "org.apache.pulsar.functions.api.utils.IdentityFunction"
   autoAck: true
   source {
     className: "com.emqx.pulsar.io.EMQXSource"
     configs: "{\"inputTopics\":\"sample/abc\"}"
     typeClassName: "[B"
   }
   sink {
     topic: "rule_topic_rule1"
     typeClassName: "[B"
   }
   , maxBufferedTuples=1024, port=7394) from archive 
/tmp/pulsar_functions/public/default/emxq_source_rule1/0/utils.jar
   03:02:49,742 INFO [public/default/emxq_source_rule1] [instance-0] 
JavaInstanceRunnable - Initialize function class loader for function 
emxq_source_rule1 at function cache manager
   03:02:50,202 INFO [public/default/emxq_source_rule1] [instance-0] 
JavaInstanceRunnable - Starting state table for function emxq_source_rule1
   03:02:50,783 ERROR [public/default/emxq_source_rule1] [instance-0] 
JavaInstanceRunnable - [public-emxq_source_rule1] Uncaught exception in Java 
Instance
   java.lang.NoClassDefFoundError: org/eclipse/paho/client/mqttv3/MqttCallback
        at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_181]
        at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
~[?:1.8.0_181]
        at 
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
~[?:1.8.0_181]
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
~[?:1.8.0_181]
        at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
~[?:1.8.0_181]
        at java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[?:1.8.0_181]
        at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[?:1.8.0_181]
        at java.security.AccessController.doPrivileged(Native Method) 
~[?:1.8.0_181]
        at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
~[?:1.8.0_181]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_181]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_181]
        at java.lang.Class.forName0(Native Method) ~[?:1.8.0_181]
        at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_181]
        at 
org.apache.pulsar.functions.utils.Reflections.createInstance(Reflections.java:108)
 ~[java-instance.jar:2.1.1-incubating]
        at 
org.apache.pulsar.functions.instance.JavaInstanceRunnable.setupInput(JavaInstanceRunnable.java:534)
 ~[java-instance.jar:2.1.1-incubating]
        at 
org.apache.pulsar.functions.instance.JavaInstanceRunnable.setupJavaInstance(JavaInstanceRunnable.java:161)
 ~[java-instance.jar:2.1.1-incubating]
        at 
org.apache.pulsar.functions.instance.JavaInstanceRunnable.run(JavaInstanceRunnable.java:188)
 [java-instance.jar:2.1.1-incubating]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]
   Caused by: java.lang.ClassNotFoundException: 
org.eclipse.paho.client.mqttv3.MqttCallback
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
~[?:1.8.0_181]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_181]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_181]
        ... 18 more
   03:02:50,788 INFO [public/default/emxq_source_rule1] [instance-0] 
JavaInstanceRunnable - Closing instance
   ```
   #### Steps to reproduce
   
[emqx-source-0.0.2-SNAPSHOT.nar.zip](https://github.com/apache/pulsar/files/2537123/emqx-source-0.0.2-SNAPSHOT.nar.zip)
   1. Start pulsar standalone
   2. Unzip the attached source connector. Submit it via Admin CLI, e.g.:
   sudo ./pulsar-admin source create --className com.emqx.pulsar.io.EMQXSource 
--archive /pathToNar/emqx-source-0.0.2-SNAPSHOT.jar --tenant public --namespace 
default --name mqtt_source --destinationTopicName mqtt_message --sourceConfig 
'{"inputTopics":"sample/abc"}
   Console shows "Created successfully"
   3. Open the log for public/default/mqtt_source, NoClassDefFoundError can be 
found.
   
   Notice that, the source connector can run in localrun mode successfully.
   
   #### System configuration
   **Pulsar version**: 2.1.1-incubating
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to