Caleb Lim created KAFKA-7346: -------------------------------- Summary: Cannot run Kafka Connect within a web application Key: KAFKA-7346 URL: https://issues.apache.org/jira/browse/KAFKA-7346 Project: Kafka Issue Type: Improvement Components: KafkaConnect Affects Versions: 1.1.1 Reporter: Caleb Lim
The Plugins class loads plugins using DelegatingClassLoader whose parent class loader is Application class loader. public DelegatingClassLoader(List<String> pluginPaths) { this(pluginPaths, ClassLoader.getSystemClassLoader()); //-> Application class loader } When running Kafka Connect within tomcat web applications, Plugins#pluginClass always throws ClassNotFoundException because "pluginClass" is loaded not by Application class loader but by ParallelWebAppClassLoader. protected static Class pluginClass(...){ Class<?> klass = loader.loadClass(classOrAlias, false); if (pluginClass.isAssignableFrom(klass)) { // -> returns false return (Class<? extends U>) klass; } throw new ClassNotFoundException(...); } Here is the class loader hierarchy when using JsonConverter: Converter -ParallelWebAppClassLoader - URLClassLoader (parent) -Launcher$AppClassLoader (parent) JsonConverter -PluginClassLoader -DelegatingClassLoader(parent) -Launher$AppClassLoader -- This message was sent by Atlassian JIRA (v7.6.3#76005)