Я пытаюсь запустить Kafka Connect (1.1.1-cp1) в весеннем веб-приложении, создав экземпляр StandalonHerder в виде Spring Bean, но получая ClassNotFoundException из Plugins # pluginClass ниже.
protected static Class pluginClass(…){
Class<?> klass = loader.loadClass(classOrAlias, false); //-> Klass = org.apache.kafka.connect.json.JsonConverter
if (pluginClass.isAssignableFrom(klass)) { //pluginClass = org.apache.kafka.connect.storage.Converter
return (Class<? extends U>) klass;
}
throw new ClassNotFoundException(…);
}
Вот иерархия загрузчиков классов klass и pluginClass.
Так как их загрузчики классов различны, isAssignableFrom возвращает false и выдает исключение.
klass
- PluginClassLoader
Parent: DelegatingClassLoader
Parent: Launcher$AppClassLoader
pluginClass
- ParallelWebAppClassLoader
Parent: URLClassLoader
parent : Launch$AppClassLoader.
Может ли Kafka Connect работать в веб-приложении? или я что-то упустил?
Вот иерархия загрузчиков классов при запуске Kafka connect из основного метода.
klass
- PluginClassLoader
Parent: DelegatingClassLoader
Parent: Launcher$AppClassLoader
pluginClass
- Launch$AppClassLoader.
isAssignableFrom возвращает true в этом случае.