Presentation about java plug-in development technologiy OSGI. Eclipse based on this technology and has Equinox core. This presentation also describes how to develop plugin for eclipse.
2. План
1. Спецификация OSGi
2. Реализация OSGi – Equinox, Eclipse plug-in
development
3. История одного плагина + demo
Author: Konstantin Slisenko, JazzTeam, 2011
3. OSGi
• Open Services Gateway Initiative
• Спецификация архитектуры для создания
модульных java-приложений
• Разрабатывается некоммерческой
организацией OSGI Alliance (osgi.org)
• Применение
Сначала: автомобильная и промышленная
электроника
Сейчас: многофункциональные desktop-приложения
и enterprise системы
Author: Konstantin Slisenko, JazzTeam, 2011
4. Основная идея OSGI
• Вся система состоит из плагинов (бандлов)
• Бандлы
– Содержат java классы и другие ресурсы
– Могут взаимодействовать друг с другом
– Могут добавляться, удаляться, запускаться,
останавливаться, обновляться в runtime
– Работают в рамках одной JVM, но могут быть
distributed
– Имеют версию
• Бандлом может быть, например, web-сервер,
или любое другое приложение
Author: Konstantin Slisenko, JazzTeam, 2011
5. Жизненный цикл бандла
• Экономия ресурсов
– Нет необходимости держать в памяти
неиспользуемые в данный момент бандлы
– Не нужно при старте приложения загружать все
бандлы – они подгрузятся по мере
необходимости
Author: Konstantin Slisenko, JazzTeam, 2011
6. Взаимодействие между бандлами
• Бандлы
– создают сервисы
– используют сервисы других
• Взаимодействуют через Service Registry API
– Ничего не знают друг о друге, просто ищут
нужные им сервисы
– Взаимодействие похоже на SOA-приложение в
одной JVM
Author: Konstantin Slisenko, JazzTeam, 2011
7. Бандл = jar-файл с метаданными
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: My favorite Plug-in
Bundle-SymbolicName: org.my_plugin; singleton:=true Bundle-
Version: 1.0.0
Bundle-ClassPath: my_plugin.jar
Bundle-Activator: org.my_plugin.demo.MyActivator
Bundle-Vendor: Me
Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime
Eclipse-LazyStart: true
Export-Package: org.my_plugin.demo.subpackage;
uses:="org.eclipse.swt.graphics, org.eclipse.jface.viewers,
org.eclipse.ui.part, org.eclipse.swt.widgets"
• Метаданные описываются в файле
манифеста
• META-INF/MAINFEST.MF
Author: Konstantin Slisenko, JazzTeam, 2011
9. Плюсы
• Модульность приложения
• Возможность сбора приложения на лету
• Позднее и слабое связывание
– Все бандлы взаимодействуют через Service Registry API
– Не знают друг о друге
• В системе могут одновременно быть множество различных версий
одного бандла
• Возрастает надёжность системы
– Пример: в системе 700 бандлов, если один из них валится, не валится вся
система
– Неработающий бандл можно перезагрузить, работа системы не
остановится
• Экономия ресурсов
• Возможность поддержки системы 24 часа в сутки, 365 дней в году
– Система не отключается даже при замене оборудования
• Дополнительные возможности спецификации OSGi:
– Security, Logging, Configuration, etc.
Author: Konstantin Slisenko, JazzTeam, 2011
10. Тенденции модульности в Java 7
• Модульность будет реализована в JDK 7 на
уровне языка
– Сейчас JDK в основном монолитная
Author: Konstantin Slisenko, JazzTeam, 2011
11. Реализации OSGi
• 4 открытых фреймворка
– Apache Felix
– Knopflerfish
– Equinox (ядро Eclipse с версии 3.0)
– Consierge OSGi
• Множество коммерческих
– Samsung Service Provider 3.1
– RIO framework (Siemens)
– …
• Теоретически одни и те же бандлы можно
устанавливать в различные реализации
контейнеров
Author: Konstantin Slisenko, JazzTeam, 2011
13. Eclipse
• Больше, чем IDE
• Платформа для разработки
интегрированных приложений
• Построен в виде набора расширяемых
подсистем, а не как монолитное
приложение
• После версии 3.0 был переведён на
открытый стандарт OSGi (Equinox)
Author: Konstantin Slisenko, JazzTeam, 2011
14. Архитектура Eclipse
• Platform – ядро Eclipse
– Не содержит полезной для пользователя
функциональности
– Основа для работы остальных компонентов Eclipse
Author: Konstantin Slisenko, JazzTeam, 2011
15. Практически чистый Eclipse
• Все расширения Eclipse - плагины
• 761 плагин (я доустановил 2-3)
Author: Konstantin Slisenko, JazzTeam, 2011
16. Обзор Eclipse
• Perspectives
• Views
• Editors
• Main Menu
• Preferences
• Toolbar
и т.д.
Author: Konstantin Slisenko, JazzTeam, 2011
18. Views
Окошки для дополни-
тельной навигации и
отображения различной
информации, измене-
ния настроек и т.д.
Author: Konstantin Slisenko, JazzTeam, 2011
19. Editors
Редакторы для
различных нужд
– Работа с текстом
– Подсветка
синтаксиса
– Работа с XML
Остаются при смене
перспективы
Author: Konstantin Slisenko, JazzTeam, 2011
20. Eclipse plug-in development
• Проект Eclipse PDE
– http://www.eclipse.org/pde/
– 4 июня вебинар для Belarus
Open Source Lab, докладчик
Eclipse PDE Team Lead (Индия,
Бангалор)
• Инструментарий для
разработки плагинов
Author: Konstantin Slisenko, JazzTeam, 2011
21. Принципы плагинной
системы Eclipse
• Плагины предоставляют точки расширения
(Extension Points)
• Плагины создают расширения (Extensions)
– Используют точки расширения других плагинов
• Пример – расширяем обычный текстовый
редактор в редактор для работы с XML
• Точки расширения описываются в plugin.xml
Author: Konstantin Slisenko, JazzTeam, 2011
22. plugin.xml
• При запуске Equinox загружает plugin.xml
каждого плагина
• Строится граф зависимостей
• Описывает:
– Extension Points, которые мы предоставляем
другим плагинам
– Extensions, которые мы реализуем в нашем
плагине
– Список плагинов, необходимых для работы нашего
и т.д.
Author: Konstantin Slisenko, JazzTeam, 2011
24. История одного плагина
Проект Snipple:
• Используй готовый код, а не пиши его каждый раз
• Сохраняй различные фрагменты кода
• Обменивайся ими с другими разработчиками
• Фрагменты кода называются сниппетами
• Рейтинговая система – сниппеты от более
авторитетного разработчика будут имеют
больший вес
• Категории, теги, генерация pdf из подборки
сниппетов по определённой технологии
• И ещё много других весёлых штук
Author: Konstantin Slisenko, JazzTeam, 2011
25. История одного плагина
Имеется:
• J2EE web-приложение
• web-интерфейс для поиска, добавления,
удаления сниппетов
• Приложение использует БД
• Приложение предоставляет web-сервисы
Задача:
• Разработать плагин для Eclipse для
работы с системой прямо из IDE
Author: Konstantin Slisenko, JazzTeam, 2011
26. Use Case
Author: Konstantin Slisenko, JazzTeam, 2011
uc Use Case Model
User
User in snipple
Найти сниппеты
(постраничная
выдача - как?)
По тегу
Вставить сниппет в
редактор
Добавить сниппет
Опубликовать
сниппет на сайте
Добавить сниппет
локально
Изменить настройки
Изменить URI of
snipper WS
Задать логин/пароль
Добавить сниппет к
себе в локальный
каталог
Удалить сниппет из
локального каталога
Удалить сниппет с
сайта
По ID
Изменить
директорию с
файлами плагина«extend»
«extend»
«extend» «extend»
«extend»«extend»
«extend» «extend»
28. Функционал плагина
• Два вида (views):
– Для локальных сниппетов, поддержка
категорий
– Для поиска сниппетов в web-приложении
Snipple
• Страница настроек плагина
• Перенос сниппетов из видов в редактор
перетягиванием
• Редактирование свойств сниппетов в
стандартном Properties view
Author: Konstantin Slisenko, JazzTeam, 2011
29. Часть архитектуры плагина
Author: Konstantin Slisenko, JazzTeam, 2011
class Class Model
Remote Snippets View
Views
Local Snippets View
Model
Remote StorageLocal Storage
«interface»
ILocalStorage
«interface»
IRemoteStorage
FileSystemLocalStorage
LocalSnippetsMemoryStorage
LocalStorageSnippetParser
RemoteSnippetsMemoryStorage
WebServicesRemoteStorage RemoteStorageSnippetsParser
Snippet
Category
TreeParent
TreeObject
LocalSnippetsView
LocalSnippetsTreeContentProvider
LocalSnippetsTreeLabelProvider RemoteSnippetsView
RemoteSnippetTableContentProvider
RemoteSnippetTableLabelProvider
31. С чего начать изучать
разработку плагинов?
1. vogella.de/eclipse.html
2. eclipsepluginsite.com
3. Eclipse Plug-ins: Third Edition, Eric
Clayberg, Dan Rubel
4. Мастер создания плагинов в самом Eclipse
Author: Konstantin Slisenko, JazzTeam, 2011