Рейтинг@Mail.ru
[Войти] [Зарегистрироваться]

Наши друзья и партнеры

UnixForum
Беспроводные выключатели nooLite купить дешевый 
компьютер родом из Dhgate.com

Lines Club

Ищем достойных соперников.

Библиотека сайта или "Мой Linux Documentation Project"

Фреймворк Violet

Глава 22 из книги "Архитектура приложений с открытым исходным кодом", том 1.

Оригинал: "Violet", глава из книги "The Architecture of Open Source Applications"
Автор: Cay Horstmann
Перевод: Н.Ромоданов

22.9. Архитектура плагинов

Программисту, знакомому с графикой 2D, будет несложно добавить в Violet новый тип диаграммы. Например, диаграммы активностей были предоставлены третьими лицами. Когда мне потребовалось создать синтаксические диаграммы и диаграммы ER, я решил, что быстрее написать расширения для Violet, а не возиться с Visio или Dia. (На реализацию диаграмм каждого типа потребовалось по одному дню).

Эти реализации не требуются знание всего фреймворка Violet. Необходимы только интерфейсы классов graph, node и edge и соответствующие их реализации. Чтобы упростить задачу разработчикам, я, самостоятельно отделив их от фреймворка, разработал простую архитектуру плагинов.

Конечно, в многих программах есть архитектура плагинов, причем достаточно сложная. Когда кто-то предположил, что Violet должен поддерживать OSGi, я содрогнулся и вместо этого реализовал более простую вещь, которая работает.

Авторы просто создают файл JAR со своими реализациями классов graph, node и edge и помещают его в папку плагинов. Когда Violet запускается, он загружает эти плагины с помощью класса Java ServiceLoader. Этот класс был разработан для загрузки сервисов, например, драйверов JDBC. ServiceLoader загружает файлы JAR, в которых должен быть предоставлен класс, реализующий данный интерфейс (в нашем случае интерфейс Graph).

Каждый файл JAR должен иметь подкаталог META-INF/services, содержащий файл, имя которого является полным квалифицированным именем класса интерфейса (например, com.horstmann.violet.Graph), и в котором в каждой строке указывается имя реализации каждого класса. ServiceLoader строит загрузчик классов для каталога плагинов и загружает все плагины:

ServiceLoader<Graph> graphLoader = ServiceLoader.load(Graph.class, classLoader);
for (Graph g : graphLoader) // ServiceLoader<Graph> implements Iterable<Graph>
  registerGraph(g);

Это простое, но полезное средство стандартного языка Java, которое может оказаться ценным для ваших собственных проектов.

22.10. Заключение

Как и многие другие проекты с открытым исходным кодом, проект Violet родился вследствие неудовлетворенных потребностей - рисовать простые диаграммы UML с минимальной суетой. Violet стал возможным благодаря удивительной широте платформы Java SE, и в нем используется набор разнообразных технологий, которые являются частью этой платформы. В этой статье я описал, как в Violet используются технологии Java Beans, хранения данных, Java Web Start, Java 2D, Swing Undo / Redo и средства загрузки сервисов. Не всегда достаточно ясно, как пользоваться этими технологиями в качестве базы Java и Swing, но они могут значительно упростить архитектуру настольных приложений. Они позволили мне, первоначально единственному разработчику, создать в течение нескольких месяцев успешное приложение, работая над ним неполный рабочий день. Использование этих стандартных механизмов позволило предоставить другим разработчикам возможность самостоятельно улучшать Violet, а также применять его отдельные части в своих собственных проектах.

Примечания

  1. В то время я еще не знал о замечательной программе UMLGraph, созданной Диомидисом Спинелисом (Diomidis Spinellis) [Spi03]
  2. http://jung.sourceforge.net
  3. http://www.omg.org/technology/documents/formal/xmi.htm
  4. http://jcp.org/en/jsr/detail?id=57
  5. http://jcp.org/en/jsr/detail?id=296
  6. http://kenai.com/projects/guts
  7. http://horstmann.com/gridworld


Продолжение статьи: К началу статьи.


Эта статья еще не оценивалась
Вы сможете оценить статью и оставить комментарий, если войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.

Комментарии отсутствуют