У меня проблема, я просто не могу опустить голову.класс 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-приложениям), объясняют, как загружать и загружать кластер во время выполнения, а также как загружать загруженные классы в другой класс чем объект?
Благодаря
Лассе