2013-10-15 2 views
0

У меня проблема, я просто не могу опустить голову.класс casting runtime добавленные классы

Я создаю приложение jsf, где я (как администратор) могу загрузить файл jar, и таким образом обновить приложение.

Через этот учебник: http://docs.oracle.com/javase/tutorial/deployment/jar/jarclassloader.html Мне удалось загрузить файл jar. Первая проблема заключается в том, что я могу загружать только класс как «Объект», а не передавать другому типу класса. Я получаю исключение ClassCastException.

JarClassLoader jcl=new JarClassLoader(url); 
Class cl= jcl.retreiveClass(jcl.getMainClassName()); 
Object ob=cl.newInstance(); //I would like to make this a RouteBuilder object instead of Object 

Конкретно я использую Apache Camel, где я могу добавить маршруты к существующему "ядро" (CamelContext). Что происходит, так это то, что у меня есть ядро ​​верблюда apache, работающего в моем веб-приложении, и затем я могу добавить время выполнения маршрутов. Это маршрут, который я хочу упаковать как банку и загрузиться во время выполнения приложения (я хочу разработать и протестировать маршрут в своей локальной среде, а затем послесловие загрузить его в производственное приложение). Конкретный маршрут - это просто класс java, который расширяет RouteBuilder. Я хочу загрузить jar, classLoad (URLClassLoader) основной класс (может быть, весь jar? - это имеет смысл?) И преобразовать его в RouteBuilder. Это кажется невозможным. Я решил загрузить файл jar в папку за пределами моей войны, так что маршруты не стираются, когда я перезапускаю webapp (это умный или это должно быть сделано другим способом?). Это проблема с именами? Кроме того, мне не удалось выяснить, нужно ли мне перемещать весь мой файл jar и загружать класс в один класс внутри. Любые комментарии по этому поводу?

Мне кажется, что у меня есть некоторые фундаментальные заблуждения о том, как продлить/обновить приложение Java. Я просто не могу найти хороших примеров/объяснений о том, как решить мою проблему, и поэтому я пришел к выводу, что я не понимаю это на концептуальном уровне.

Может ли кто-нибудь подробно рассказать о том, как расширить запущенное приложение jsf (я думаю, что те же самые проблемы относятся к родным Java-приложениям), объясняют, как загружать и загружать кластер во время выполнения, а также как загружать загруженные классы в другой класс чем объект?

Благодаря

Лассе

ответ

0

Если вы заинтересованы в загрузке маршрутов без остановки приложения вы могли бы рассмотреть возможность использования OSGi контейнер, как Karaf. Karaf обеспечивает поддержку маршрутов Apache Camel из коробки: http://camel.apache.org/karaf.html

Все загрузки классов управляются контейнером OSGi, и вам просто нужно запустить некоторые команды для обновления. Я не уверен, что это может работать с вашим приложением JSF, но стоит взглянуть.

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