2014-09-30 4 views
1

Я разрабатываю веб-приложение со встроенной архитектурой компонентов (плагинами). Мое требование состоит в том, чтобы добавить новый плагин (классы) в приложение без перезапуска приложения, его следует удалить в каталоге lib или плагина веб-приложения, и приложение сможет его поднять.Как загрузить классы из файла jar во время выполнения?

Я пробовал это с сервером tomcat, но он не может загрузить файл jar, упавший в его каталог lib после его запуска.

Может ли кто-нибудь предложить лучший способ сделать это?

+1

Лучше использовать OSGI для этой цели. Его способность загружать и выгружать Jars/Packages/Classes из вашего пути к классам во время выполнения. Вы даже можете определить их в репозитории, где их можно искать и загружать, без необходимости знать их имена. – Stefan

+0

Я тоже собирался добавить этот указатель. Основной аргумент: вы * не хотите * изобретать, внедрять и поддерживать еще одну структуру компонентов, когда есть тот, кто прибил все это, если только это не для академических развлечений. Но даже тогда я считаю, что эта проблема очень хорошо решена в OSGI. –

ответ

0

ваша попытка хорошо, что когда-либо вы пытаетесь сделать может помочь вам ниже код

URL urls [] = {}; 

JarFileLoader cl = new JarFileLoader (urls); 

cl.addFile ("/opt/mysql-connector-java-5.0.4/mysql-connector-java-5.0.4-bin.jar"); 

System.out.println ("attempt..."); 

cl.loadClass ("org.gjt.mm.mysql.Driver"); 

System.out.println ("Success!"); 

Я надеюсь, что это поможет вам

Виртуальная машина Java ищет и загружает классы в следующем порядке:

Начальные классы, которые представляют собой классы, которые составляют платформу Java, включая классы в rt.jar и несколько других важных JAR-файлов.

Классы расширения, в которых используется механизм расширения Java. Эти классы поставляются в виде файлов JAR и находятся в каталоге расширений.

Классы пользователей - это классы, определенные разработчиками и третьими лицами и не использующие механизм расширения.

+0

Спасибо, Сантош, но в моем случае я не могу упомянуть имя jarfile или даже имя класса, потому что во время выполнения это может быть что угодно, что я делаю является аннотированным каждым классом плагина с аннотацией @Plugin, и это единственное, что моя логика сканирования плагинов работает. Что я могу сделать, так это запустить эту логику сканирования плагина с регулярным интервалом. – 2014-09-30 05:14:48

Смежные вопросы