Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как реализуется модульность приложения?


Автор: VSergeyV 14.2.2007, 08:36
Как реализуется модульность приложения?

Необходимо сделать приложение, в последствие часть функций должны быть оформлены в виде модулей, причем при поставке не используемые заказчиком модули ему не поставляются

Автор: carper 14.2.2007, 09:18
1. При чем здесь GUI ?
2. Ну, например, возможно поставлять индивидуальный файл - описание (тот же xml подойдет) и использовать динамическую загрузку классов.
   Можно почитать про механизмы разработки plug-ins.
   Можно использовать индивидуальный класс-диспетчер, "знающий", что именно доступно, а что нет, и как себя вести при недоступности той или иной возможности. Ну, вот здесь еще как-то можно притянуть GUI на предмет делания серыми недоступных пунктов меню. smile

   При разработке таковых модулей придется обратить особое внимание на их полную независимость от других, или обеспечивать механизм реакции на недоступность того или иного модуля, полностью прозрачный для пользователя.
  

Автор: batigoal 14.2.2007, 16:16
Обычно для этого задействуются такие вещи, как:
1) Интерфейсы (имею в виду концепцию языка). Например, каждый модуль должен реализовывать интерфейс Plugin с методами getName(), init(), paint()...
2) Reflection API для динамической загрузки главного класса плагина.
3) По возможности однотипные конфигурационные файлы.
В принципе, всё то же самое уже высказал carper.

Кроме того, есть ещё такая вещь, как http://java.sun.com/products/plugin/, но в целесообразности её использования я не уверен.

Автор: Akeem 18.1.2009, 16:43
У меня возник тот же вопрос.

Мне бы хотелось реализовать систему с гарячей заменой классов. Те классы (.java  фалы или если сложно то .class) сбрасывались бы в какую-то папку и подхватывались по мере их необходимости в работе приложения. 

Такое возможно или все таки надо реализовывать это через плагин систему? Второе не очень хорошо так как в приложении порядка 100-200 классов которые могут часто менятся.

Автор: ivg 18.1.2009, 17:27
Akeem, https://scripting.dev.java.net/: http://www.beanshell.org/

Автор: COVD 18.1.2009, 20:49
Цитата

Мне бы хотелось реализовать систему с гарячей заменой классов. Те классы (.java  фалы или если сложно то .class) сбрасывались бы в какую-то папку и подхватывались по мере их необходимости в работе приложения.


Вроде, java и так уже "гарячо" отжигает - класслоадер подгружает и выгружает классы по мере необходимости.  А плагинность ( она же модульность ) удобна, когда разные команды вносят свои лепты в успех. "С миру по нитке".

P.S. Наверное, неплохо бы "необходимость" сначала конкретизировать.  

Автор: GirroKepasso 18.1.2009, 22:59
Вот интересная статья на тему плагинов/расширений http://wiki.apidesign.org/wiki/CodeInjection
Еще можно посмотреть в сторону NetBeans Lookup там несколько  jar'ов надо взять из NetBeas RCP Platform и в своем приложении можно будет использовать механизм Lookup

Автор: vdweller 19.1.2009, 12:01
Цитата(Akeem @ 18.1.2009,  16:43)
У меня возник тот же вопрос.

Мне бы хотелось реализовать систему с гарячей заменой классов. Те классы (.java  фалы или если сложно то .class) сбрасывались бы в какую-то папку и подхватывались по мере их необходимости в работе приложения. 

Такое возможно или все таки надо реализовывать это через плагин систему? Второе не очень хорошо так как в приложении порядка 100-200 классов которые могут часто менятся.

Сам сейчас интересуюсь подобной проблемой, пока смотрю в сторону OSGi сервисов. Общий смысл - есть сторонний OSGi  фреймоворк внутри которого разворачиваются т.н. OSGi bundles. Т .е. сервис разбивается на эти самые бандлы и потом эти бандлы деплоятся внутри фреймворка c возможностью горячей замены и т.п. Из бесплатных фреймворков - Apache Felix - http://felix.apache.org/site/index.html и Knopflerfish - http://www.knopflerfish.org/documentation.html. Если у кого то есть подобный опыт, хотелось бы задать пару вопросов.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)