konstantin slisenko - osgi, equinox, eclipse plug-in development, v 2.0

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

Upload: beloslab

Post on 27-May-2015

1.016 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

OSGI, Equinox, Eclipse plug-in development

Author: Konstantin Slisenko, JazzTeam, 2011

Page 2: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

План

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

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

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

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

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

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

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

Author: Konstantin Slisenko, JazzTeam, 2011

Page 5: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

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

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

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

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

Author: Konstantin Slisenko, JazzTeam, 2011

Page 6: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

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

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

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

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

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

Author: Konstantin Slisenko, JazzTeam, 2011

Page 7: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

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

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

Author: Konstantin Slisenko, JazzTeam, 2011

Page 9: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

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

– Все бандлы взаимодействуют через 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

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

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

Author: Konstantin Slisenko, JazzTeam, 2011

Page 11: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

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

Eclipse

Author: Konstantin Slisenko, JazzTeam, 2011

Page 13: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

Eclipse

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

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

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

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

Author: Konstantin Slisenko, JazzTeam, 2011

Page 14: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

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

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

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

Author: Konstantin Slisenko, JazzTeam, 2011

Page 15: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

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

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

Author: Konstantin Slisenko, JazzTeam, 2011

Page 16: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

Обзор 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

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

Author: Konstantin Slisenko, JazzTeam, 2011

Page 18: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

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

Author: Konstantin Slisenko, JazzTeam, 2011

Page 19: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

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

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

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

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

Author: Konstantin Slisenko, JazzTeam, 2011

Page 20: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

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

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

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

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

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

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

Page 22: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

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

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

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

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

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

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

Author: Konstantin Slisenko, JazzTeam, 2011

Page 25: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

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

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

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

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

Page 26: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

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

Внешний вид

Author: Konstantin Slisenko, JazzTeam, 2011

Page 28: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

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

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

Snipple

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

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

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

Page 29: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

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

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

DEMO

Author: Konstantin Slisenko, JazzTeam, 2011

Page 31: Konstantin Slisenko - OSGi, Equinox, Eclipse plug-in development, v 2.0

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

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

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

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

Author: Konstantin Slisenko, JazzTeam, 2011