Eclipse plugin development, OSGI, Equinox

32
OSGI, Equinox, Eclipse plug-in development Author: Konstantin Slisenko, JazzTeam, 2011

description

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.

Transcript of Eclipse plugin development, OSGI, Equinox

Page 1: Eclipse plugin development, OSGI, Equinox

OSGI, Equinox, Eclipse plug-in development

Author: Konstantin Slisenko, JazzTeam, 2011

Page 2: Eclipse plugin development, OSGI, Equinox

План

1. Спецификация OSGi2. Реализация OSGi – Equinox, Eclipse plug-in

development3. История одного плагина + demo

Author: Konstantin Slisenko, JazzTeam, 2011

Page 3: Eclipse plugin development, OSGI, Equinox

OSGi

• Open Services Gateway Initiative• Спецификация архитектуры для создания

модульных java-приложений• Разрабатывается некоммерческой организацией

OSGI Alliance (osgi.org)

• ПрименениеСначала: автомобильная и промышленная электроникаСейчас: многофункциональные desktop-приложения и enterprise системы

Author: Konstantin Slisenko, JazzTeam, 2011

Page 4: Eclipse plugin development, OSGI, Equinox

Основная идея OSGI

• Вся система состоит из плагинов (бандлов)• Бандлы

– Содержат java классы и другие ресурсы– Могут взаимодействовать друг с другом– Могут добавляться, удаляться, запускаться,

останавливаться, обновляться в runtime– Работают в рамках одной JVM, но могут быть distributed– Имеют версию

• Бандлом может быть, например, web-сервер, или любое другое приложение

Author: Konstantin Slisenko, JazzTeam, 2011

Page 5: Eclipse plugin development, OSGI, Equinox

Жизненный цикл бандла

• Экономия ресурсов– Нет необходимости держать в памяти

неиспользуемые в данный момент бандлы– Не нужно при старте приложения загружать все

бандлы – они подгрузятся по мере необходимости

Author: Konstantin Slisenko, JazzTeam, 2011

Page 6: Eclipse plugin development, OSGI, Equinox

Взаимодействие между бандлами

• Бандлы – создают сервисы– используют сервисы других

• Взаимодействуют через Service Registry API– Ничего не знают друг о друге, просто ищут

нужные им сервисы

– Взаимодействие похоже на SOA-приложение в одной JVM

Author: Konstantin Slisenko, JazzTeam, 2011

Page 7: Eclipse plugin development, OSGI, Equinox

Бандл = 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

Архитектура OSGi

Author: Konstantin Slisenko, JazzTeam, 2011

Page 9: Eclipse plugin development, OSGI, Equinox

Плюсы• Модульность приложения• Возможность сбора приложения на лету• Позднее и слабое связывание

– Все бандлы взаимодействуют через Service Registry API– Не знают друг о друге

• В системе могут одновременно быть множество различных версий одного бандла

• Возрастает надёжность системы– Пример: в системе 700 бандлов, если один из них валится, не валится вся

система– Неработающий бандл можно перезагрузить, работа системы не остановится

• Экономия ресурсов• Возможность поддержки системы 24 часа в сутки, 365 дней в году

– Система не отключается даже при замене оборудования• Дополнительные возможности спецификации OSGi:

– Security, Logging, Configuration, etc. Author: Konstantin Slisenko, JazzTeam, 2011

Page 10: Eclipse plugin development, OSGI, Equinox

Тенденции модульности в Java 7

• Модульность будет реализована в JDK 7 на уровне языка– Сейчас JDK в основном монолитная

Author: Konstantin Slisenko, JazzTeam, 2011

Page 11: Eclipse plugin development, OSGI, Equinox

Реализации 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

Eclipse

Author: Konstantin Slisenko, JazzTeam, 2011

Page 13: Eclipse plugin development, OSGI, Equinox

Eclipse

• Больше, чем IDE• Платформа для разработки

интегрированных приложений• Построен в виде набора расширяемых

подсистем, а не как монолитное приложение

• После версии 3.0 был переведён на открытый стандарт OSGi (Equinox)

Author: Konstantin Slisenko, JazzTeam, 2011

Page 14: Eclipse plugin development, OSGI, Equinox

Архитектура Eclipse

• Platform – ядро Eclipse– Не содержит полезной для пользователя

функциональности– Основа для работы остальных компонентов Eclipse

Author: Konstantin Slisenko, JazzTeam, 2011

Page 15: Eclipse plugin development, OSGI, Equinox

Практически чистый Eclipse

• Все расширения Eclipse - плагины• 761 плагин (я доустановил 2-3)

Author: Konstantin Slisenko, JazzTeam, 2011

Page 16: Eclipse plugin development, OSGI, Equinox

Обзор Eclipse

• Perspectives• Views• Editors• Main Menu• Preferences• Toolbar

и т.д.

Author: Konstantin Slisenko, JazzTeam, 2011

Page 17: Eclipse plugin development, OSGI, Equinox

PerspectivesНабор функциональности для определённой деятельности• Java разработка• Работа с БД• Отладка, и т.д.

Author: Konstantin Slisenko, JazzTeam, 2011

Page 18: Eclipse plugin development, OSGI, Equinox

ViewsОкошки для дополни-тельной навигации и отображения различной информации, измене-ния настроек и т.д.

Author: Konstantin Slisenko, JazzTeam, 2011

Page 19: Eclipse plugin development, OSGI, Equinox

EditorsРедакторы для различных нужд

– Работа с текстом– Подсветка

синтаксиса– Работа с XML

Остаются при смене перспективы

Author: Konstantin Slisenko, JazzTeam, 2011

Page 20: Eclipse plugin development, OSGI, Equinox

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

Принципы плагинной системы Eclipse

• Плагины предоставляют точки расширения (Extension Points)

• Плагины создают расширения (Extensions)– Используют точки расширения других плагинов

• Пример – расширяем обычный текстовый редактор в редактор для работы с XML

• Точки расширения описываются в plugin.xmlAuthor: Konstantin Slisenko, JazzTeam, 2011

Page 22: Eclipse plugin development, OSGI, Equinox

plugin.xml

• При запуске Equinox загружает plugin.xml каждого плагина

• Строится граф зависимостей• Описывает:

– Extension Points, которые мы предоставляем другим плагинам

– Extensions, которые мы реализуем в нашем плагине

– Список плагинов, необходимых для работы нашего и т.д.

Author: Konstantin Slisenko, JazzTeam, 2011

Page 23: Eclipse plugin development, OSGI, Equinox

Пример 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

История одного плагинаПроект Snipple:• Используй готовый код, а не пиши его каждый раз• Сохраняй различные фрагменты кода• Обменивайся ими с другими разработчиками

• Фрагменты кода называются сниппетами• Рейтинговая система – сниппеты от более

авторитетного разработчика будут имеют больший вес• Категории, теги, генерация pdf из подборки сниппетов

по определённой технологии• И ещё много других весёлых штук

Author: Konstantin Slisenko, JazzTeam, 2011

Page 25: Eclipse plugin development, OSGI, Equinox

История одного плагинаИмеется:• J2EE web-приложение• web-интерфейс для поиска, добавления,

удаления сниппетов• Приложение использует БД• Приложение предоставляет web-сервисы

Задача: • Разработать плагин для Eclipse для работы с

системой прямо из IDE Author: Konstantin Slisenko, JazzTeam, 2011

Page 26: Eclipse plugin development, OSGI, Equinox

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

Внешний вид

Author: Konstantin Slisenko, JazzTeam, 2011

Page 28: Eclipse plugin development, OSGI, Equinox

Функционал плагина• Два вида (views):

– Для локальных сниппетов, поддержка категорий– Для поиска сниппетов в web-приложении

Snipple

• Страница настроек плагина• Перенос сниппетов из видов в редактор

перетягиванием• Редактирование свойств сниппетов в

стандартном Properties viewAuthor: Konstantin Slisenko, JazzTeam, 2011

Page 29: Eclipse plugin development, OSGI, Equinox

Часть архитектуры плагина

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

DEMO

Author: Konstantin Slisenko, JazzTeam, 2011

Page 31: Eclipse plugin development, OSGI, Equinox

С чего начать изучать разработку плагинов?

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

Спасибо за внимание!

Презентация будет доступна на сайте oslab.by

Author: Konstantin Slisenko, JazzTeam, 2011