konstantin slisenko - osgi, equinox, eclipse plug-in development, v 2.0
TRANSCRIPT
![Page 1: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/1.jpg)
OSGI, Equinox, Eclipse plug-in development
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 2: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/2.jpg)
План
1. Спецификация OSGi2. Реализация OSGi – Equinox, Eclipse plug-in
development3. История одного плагина + demo
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 3: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/3.jpg)
OSGi
• Open Services Gateway Initiative• Спецификация архитектуры для создания
модульных java-приложений• Разрабатывается некоммерческой организацией
OSGI Alliance (osgi.org)
• ПрименениеСначала: автомобильная и промышленная электроникаСейчас: многофункциональные desktop-приложения и enterprise системы
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 4: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/4.jpg)
Основная идея OSGI
• Вся система состоит из плагинов (бандлов)• Бандлы
– Содержат java классы и другие ресурсы– Могут взаимодействовать друг с другом– Могут добавляться, удаляться, запускаться,
останавливаться, обновляться в runtime– Работают в рамках одной JVM, но могут быть distributed– Имеют версию
• Бандлом может быть, например, web-сервер, или любое другое приложение
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 5: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/5.jpg)
Жизненный цикл бандла
• Экономия ресурсов– Нет необходимости держать в памяти
неиспользуемые в данный момент бандлы– Не нужно при старте приложения загружать все
бандлы – они подгрузятся по мере необходимости
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 6: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/6.jpg)
Взаимодействие между бандлами
• Бандлы – создают сервисы– используют сервисы других
• Взаимодействуют через Service Registry API– Ничего не знают друг о друге, просто ищут
нужные им сервисы
– Взаимодействие похоже на SOA-приложение в одной JVM
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 7: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/7.jpg)
Бандл = 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
![Page 8: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/8.jpg)
Архитектура OSGi
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 9: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/9.jpg)
Плюсы• Модульность приложения• Возможность сбора приложения на лету• Позднее и слабое связывание
– Все бандлы взаимодействуют через Service Registry API– Не знают друг о друге
• В системе могут одновременно быть множество различных версий одного бандла
• Возрастает надёжность системы– Пример: в системе 700 бандлов, если один из них валится, не валится вся
система– Неработающий бандл можно перезагрузить, работа системы не остановится
• Экономия ресурсов• Возможность поддержки системы 24 часа в сутки, 365 дней в году
– Система не отключается даже при замене оборудования• Дополнительные возможности спецификации OSGi:
– Security, Logging, Configuration, etc. Author: Konstantin Slisenko, JazzTeam, 2011
![Page 10: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/10.jpg)
Тенденции модульности в Java 7
• Модульность будет реализована в JDK 7 на уровне языка– Сейчас JDK в основном монолитная
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 11: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/11.jpg)
Реализации OSGi
• 4 открытых фреймворка– Apache Felix– Knopflerfish– Equinox (ядро Eclipse с версии 3.0)– Consierge OSGi
• Множество коммерческих– Samsung Service Provider 3.1– RIO framework (Siemens)– …
• Теоретически одни и те же бандлы можно устанавливать в различные реализации контейнеров
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 12: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/12.jpg)
Eclipse
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 13: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/13.jpg)
Eclipse
• Больше, чем IDE• Платформа для разработки
интегрированных приложений• Построен в виде набора расширяемых
подсистем, а не как монолитное приложение
• После версии 3.0 был переведён на открытый стандарт OSGi (Equinox)
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 14: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/14.jpg)
Архитектура Eclipse
• Platform – ядро Eclipse– Не содержит полезной для пользователя
функциональности– Основа для работы остальных компонентов Eclipse
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 15: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/15.jpg)
Практически чистый Eclipse
• Все расширения Eclipse - плагины• 761 плагин (я доустановил 2-3)
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 16: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/16.jpg)
Обзор Eclipse
• Perspectives• Views• Editors• Main Menu• Preferences• Toolbar
и т.д.
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 17: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/17.jpg)
PerspectivesНабор функциональности для определённой деятельности• Java разработка• Работа с БД• Отладка, и т.д.
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 18: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/18.jpg)
ViewsОкошки для дополни-тельной навигации и отображения различной информации, измене-ния настроек и т.д.
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 19: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/19.jpg)
EditorsРедакторы для различных нужд
– Работа с текстом– Подсветка
синтаксиса– Работа с XML
Остаются при смене перспективы
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 20: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/20.jpg)
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
![Page 21: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/21.jpg)
Принципы плагинной системы Eclipse
• Плагины предоставляют точки расширения (Extension Points)
• Плагины создают расширения (Extensions)– Используют точки расширения других плагинов
• Пример – расширяем обычный текстовый редактор в редактор для работы с XML
• Точки расширения описываются в plugin.xmlAuthor: Konstantin Slisenko, JazzTeam, 2011
![Page 22: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/22.jpg)
plugin.xml
• При запуске Equinox загружает plugin.xml каждого плагина
• Строится граф зависимостей• Описывает:
– Extension Points, которые мы предоставляем другим плагинам
– Extensions, которые мы реализуем в нашем плагине
– Список плагинов, необходимых для работы нашего и т.д.
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 23: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/23.jpg)
Пример plugin.xml<?xml version="1.0" encoding="UTF-8"?><?eclipse version="3.4"?><plugin>
<extension point="org.eclipse.ui.commands"> <category name="Sample Category" id="HelloWorldPlugin.commands.category"> </category> <command name="Sample Command" categoryId="HelloWorldPlugin.commands.category" id="HelloWorldPlugin.commands.sampleCommand"> </command> </extension>
....
</plugin>Author: Konstantin Slisenko, JazzTeam, 2011
![Page 24: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/24.jpg)
История одного плагинаПроект Snipple:• Используй готовый код, а не пиши его каждый раз• Сохраняй различные фрагменты кода• Обменивайся ими с другими разработчиками
• Фрагменты кода называются сниппетами• Рейтинговая система – сниппеты от более
авторитетного разработчика будут имеют больший вес• Категории, теги, генерация pdf из подборки сниппетов
по определённой технологии• И ещё много других весёлых штук
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 25: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/25.jpg)
История одного плагинаИмеется:• J2EE web-приложение• web-интерфейс для поиска, добавления,
удаления сниппетов• Приложение использует БД• Приложение предоставляет web-сервисы
Задача: • Разработать плагин для Eclipse для работы с
системой прямо из IDE Author: Konstantin Slisenko, JazzTeam, 2011
![Page 26: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/26.jpg)
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»
![Page 27: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/27.jpg)
Внешний вид
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 28: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/28.jpg)
Функционал плагина• Два вида (views):
– Для локальных сниппетов, поддержка категорий– Для поиска сниппетов в web-приложении
Snipple
• Страница настроек плагина• Перенос сниппетов из видов в редактор
перетягиванием• Редактирование свойств сниппетов в
стандартном Properties viewAuthor: Konstantin Slisenko, JazzTeam, 2011
![Page 29: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/29.jpg)
Часть архитектуры плагина
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
WebServ icesRemoteStorage RemoteStorageSnippetsParser
Snippet
Category
TreeParent
TreeObject
LocalSnippetsView
LocalSnippetsTreeContentProv ider
LocalSnippetsTreeLabelProv ider RemoteSnippetsView
RemoteSnippetTableContentProv ider
RemoteSnippetTableLabelProv ider
![Page 30: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/30.jpg)
DEMO
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 31: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/31.jpg)
С чего начать изучать разработку плагинов?
1. vogella.de/eclipse.html2. eclipsepluginsite.com3. Eclipse Plug-ins: Third Edition,
Eric Clayberg, Dan Rubel
4. Мастер создания плагинов в самом EclipseAuthor: Konstantin Slisenko, JazzTeam, 2011
![Page 32: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0](https://reader036.vdocuments.net/reader036/viewer/2022081519/55657f9fd8b42a95028b534e/html5/thumbnails/32.jpg)
Спасибо за внимание!
Презентация будет доступна на сайте oslab.by
Author: Konstantin Slisenko, JazzTeam, 2011