Eclipse plugin development, OSGI, Equinox
-
Upload
kslisenko -
Category
Technology
-
view
230 -
download
0
description
Transcript of Eclipse plugin development, OSGI, Equinox
![Page 1: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/1.jpg)
OSGI, Equinox, Eclipse plug-in development
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 2: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/2.jpg)
План
1. Спецификация OSGi2. Реализация OSGi – Equinox, Eclipse plug-in
development3. История одного плагина + demo
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 3: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/3.jpg)
OSGi
• Open Services Gateway Initiative• Спецификация архитектуры для создания
модульных java-приложений• Разрабатывается некоммерческой организацией
OSGI Alliance (osgi.org)
• ПрименениеСначала: автомобильная и промышленная электроникаСейчас: многофункциональные desktop-приложения и enterprise системы
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 4: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/4.jpg)
Основная идея OSGI
• Вся система состоит из плагинов (бандлов)• Бандлы
– Содержат java классы и другие ресурсы– Могут взаимодействовать друг с другом– Могут добавляться, удаляться, запускаться,
останавливаться, обновляться в runtime– Работают в рамках одной JVM, но могут быть distributed– Имеют версию
• Бандлом может быть, например, web-сервер, или любое другое приложение
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 5: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/5.jpg)
Жизненный цикл бандла
• Экономия ресурсов– Нет необходимости держать в памяти
неиспользуемые в данный момент бандлы– Не нужно при старте приложения загружать все
бандлы – они подгрузятся по мере необходимости
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 6: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/6.jpg)
Взаимодействие между бандлами
• Бандлы – создают сервисы– используют сервисы других
• Взаимодействуют через Service Registry API– Ничего не знают друг о друге, просто ищут
нужные им сервисы
– Взаимодействие похоже на SOA-приложение в одной JVM
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 7: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/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: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/8.jpg)
Архитектура OSGi
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 9: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/9.jpg)
Плюсы• Модульность приложения• Возможность сбора приложения на лету• Позднее и слабое связывание
– Все бандлы взаимодействуют через Service Registry API– Не знают друг о друге
• В системе могут одновременно быть множество различных версий одного бандла
• Возрастает надёжность системы– Пример: в системе 700 бандлов, если один из них валится, не валится вся
система– Неработающий бандл можно перезагрузить, работа системы не остановится
• Экономия ресурсов• Возможность поддержки системы 24 часа в сутки, 365 дней в году
– Система не отключается даже при замене оборудования• Дополнительные возможности спецификации OSGi:
– Security, Logging, Configuration, etc. Author: Konstantin Slisenko, JazzTeam, 2011
![Page 10: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/10.jpg)
Тенденции модульности в Java 7
• Модульность будет реализована в JDK 7 на уровне языка– Сейчас JDK в основном монолитная
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 11: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/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: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/12.jpg)
Eclipse
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 13: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/13.jpg)
Eclipse
• Больше, чем IDE• Платформа для разработки
интегрированных приложений• Построен в виде набора расширяемых
подсистем, а не как монолитное приложение
• После версии 3.0 был переведён на открытый стандарт OSGi (Equinox)
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 14: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/14.jpg)
Архитектура Eclipse
• Platform – ядро Eclipse– Не содержит полезной для пользователя
функциональности– Основа для работы остальных компонентов Eclipse
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 15: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/15.jpg)
Практически чистый Eclipse
• Все расширения Eclipse - плагины• 761 плагин (я доустановил 2-3)
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 16: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/16.jpg)
Обзор Eclipse
• Perspectives• Views• Editors• Main Menu• Preferences• Toolbar
и т.д.
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 17: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/17.jpg)
PerspectivesНабор функциональности для определённой деятельности• Java разработка• Работа с БД• Отладка, и т.д.
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 18: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/18.jpg)
ViewsОкошки для дополни-тельной навигации и отображения различной информации, измене-ния настроек и т.д.
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 19: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/19.jpg)
EditorsРедакторы для различных нужд
– Работа с текстом– Подсветка
синтаксиса– Работа с XML
Остаются при смене перспективы
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 20: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/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: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/21.jpg)
Принципы плагинной системы Eclipse
• Плагины предоставляют точки расширения (Extension Points)
• Плагины создают расширения (Extensions)– Используют точки расширения других плагинов
• Пример – расширяем обычный текстовый редактор в редактор для работы с XML
• Точки расширения описываются в plugin.xmlAuthor: Konstantin Slisenko, JazzTeam, 2011
![Page 22: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/22.jpg)
plugin.xml
• При запуске Equinox загружает plugin.xml каждого плагина
• Строится граф зависимостей• Описывает:
– Extension Points, которые мы предоставляем другим плагинам
– Extensions, которые мы реализуем в нашем плагине
– Список плагинов, необходимых для работы нашего и т.д.
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 23: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/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: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/24.jpg)
История одного плагинаПроект Snipple:• Используй готовый код, а не пиши его каждый раз• Сохраняй различные фрагменты кода• Обменивайся ими с другими разработчиками
• Фрагменты кода называются сниппетами• Рейтинговая система – сниппеты от более
авторитетного разработчика будут имеют больший вес• Категории, теги, генерация pdf из подборки сниппетов
по определённой технологии• И ещё много других весёлых штук
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 25: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/25.jpg)
История одного плагинаИмеется:• J2EE web-приложение• web-интерфейс для поиска, добавления,
удаления сниппетов• Приложение использует БД• Приложение предоставляет web-сервисы
Задача: • Разработать плагин для Eclipse для работы с
системой прямо из IDE Author: Konstantin Slisenko, JazzTeam, 2011
![Page 26: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/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: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/27.jpg)
Внешний вид
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 28: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/28.jpg)
Функционал плагина• Два вида (views):
– Для локальных сниппетов, поддержка категорий– Для поиска сниппетов в web-приложении
Snipple
• Страница настроек плагина• Перенос сниппетов из видов в редактор
перетягиванием• Редактирование свойств сниппетов в
стандартном Properties viewAuthor: Konstantin Slisenko, JazzTeam, 2011
![Page 29: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/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: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/30.jpg)
DEMO
Author: Konstantin Slisenko, JazzTeam, 2011
![Page 31: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/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: Eclipse plugin development, OSGI, Equinox](https://reader036.fdocuments.net/reader036/viewer/2022081419/555e7b7fd8b42abd468b472e/html5/thumbnails/32.jpg)
Спасибо за внимание!
Презентация будет доступна на сайте oslab.by
Author: Konstantin Slisenko, JazzTeam, 2011