Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Профиль создается, когда вы в первый раз заходите в developerWorks. Выберите данные в своем профиле (имя, страна/регион, компания) которые будут общедоступными и будут отображаться, когда вы публикуете какую-либо информацию. Вы можете изменить данные вашего ИБМ аккаунта в любое время.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

Начало работы с Eclipse Communication Framework

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

Крис Анищук, инженер-программист, IBM
Крис Анищук (Chris Aniszczyk) работает инженером-программистом в IBM Lotus и учится по программе интернатуры IBM Extreme Blue. Он искренний энтузиаст открытого исходного кода, работает с дистрибутивом Gentoo Linux (http://www.gentoo.org) и является участником проекта Eclipse Modeling Framework Technology (EMFT).
Борна Сафабахш, инженер-программист, IBM
Борна Сафабахш (Borna Safabakhsh) работает инженером-программистом в IBM Tivoli Security и учится по программе интернатуры IBM Extreme Blue. Являясь сторонником использования возможностей информационных технологий для решения проблем, он исследует новые подходы и приложения для ответов на сегодняшние и завтрашние вопросы. Является фанатом мотоспорта и всех прочих "быстрых" вещей.

Описание:  Eclipse Communication Framework (ECF) - это новый проект Eclipse, посвященный предоставлению интегрированной среды, поддерживающей создание взаимодействующих приложений на платформе Eclipse. Познакомьтесь с ECF, его основными возможностями и будущим развитием.

Дата:  14.03.2006
Уровень сложности:  простой
Активность:  1669 просмотров
Комментарии:  


Предпосылки

Целью проекта ECF, очень упрощенно, является предоставление API кросс-протокола. ECF предназначен для следующих четырех групп:

Провайдеры коммуникаций
Кто - Разработчики подключаемых модулей, реализующих новых и существующих провайдеров коммуникаций (Yahoo, AIM и др.) для Eclipse-приложений и подключаемых модулей.
Значение - Возможность взаимодействия (интероперабельность). Разработчики и пользователи могут разрешить своим приложениям работать совместно по протоколам.
Разработчики компонент
Кто - Разработчики подключаемых модулей, реализующих базовые функции на уровне компонентов (например, совместное использование файлов или электронных досок объявлений).
Значение - Повторное использование. Проектировщики приложений теперь могут повторно использовать компоненты, если реализация поставщика их поддерживает.
Интеграторы инструментальных средств
Кто - Разработчики подключаемых модулей, интегрирующие существующие приложения с помощью ECF-технологии, для добавления новых возможностей. Хорошим примером может служить добавление поддержки совместной работы в графический редактор.
Значение - Улучшение возможностей. Разработчики могут вдохнуть новую жизнь в их приложения с помощью ECF.
Разработчики пользовательских интерфейсов (user interface - UI)
Кто - Разработчики подключаемых модулей, создающие или интегрирующие пользовательские интерфейсы. ECF обеспечивает скелет, на котором вы можете создать ваши собственные UI, например, для чат-комнат, разделения файлов и т.д.
Значение - Практичность. UI может быть улучшен и настроен независимо от реализации во время проектирования или во время интеграции.

ECF выполняет эту задачу, предоставляя набор абстракций высокого уровня вместо реализации просто еще одного API системы обмена сообщениями. Такой дизайн позволяет вам повторно использовать коммуникационные компоненты (немедленная доставка сообщений, совместное использование файлов, видео-конференции и т.д.) в различных прикладных контекстах и UI. Представьте себе разработку приложения, требующего реализации системы мгновенного обмена сообщениями, ведения блогов, работы с BitTorrent, совместного доступа к файлам и видеоконференций. С помощью ECF разработка всего кода взаимодействия для каждой из этих служб может ускориться, позволяя вам сконцентрироваться на бизнес-логике и UI.


Установка ECF

ECF устанавливается как набор подключаемых модулей Eclipse через стандартный процесс установки подключаемых модулей:

Проект ECF также имеет сервер, содержащий дополнительные провайдеры и примеры приложений (IRC, JMS и т.д.):


Привлекательность ECF

Мы знаем, что привлекательность очень важна для успеха любой статьи (ведь необходимо сберечь интерес пользователя). На рисунке 1 показан пример провайдера ECF IRC, демонстрирующего некоторые возможности организации чат-комнат в рабочей среде. На рисунке 2 приведен пример окна со списком друзей с двумя соединениями для обмена сообщениями.


Рисунок 1. Провайдер ECF IRC
Рисунок 1. Провайдер ECF IRC

Рисунок 2. Окно со списком друзей
Рисунок 2. Окно со списком друзей

Теперь, когда вы знаете, как выглядит ECF, мы можем обсудить более тонкие детали.


ECF-адаптеры

Первым шагом для понимания работы ECF является быстрый взгляд на его API, в частности, на адаптеры. В ECF фундаментальными строительными блоками являются коммуникационные контейнеры экземпляров IContainer. Экземпляры IContainer предоставляют общий интерфейс для коммуникаций внутри ECF. Они могут представлять собой экземпляр коммуникационного контекста либо в модели взаимодействия клиент-сервер, либо в модели публикация-подписка.

IContainer - это важный интерфейс в ECF, а расширяемость, которую он обеспечивает через знакомый интерфейс Eclipse IAdaptable, является ключевым моментом. Поскольку ECF-контейнеры поддерживают расширяемость во время исполнения, т.е. они предоставляют интерфейс IAdaptable, вы можете запрашивать выполняющиеся экземпляры об их возможностях и пользоваться ими. Примерами возможностей в контексте ECF являются присутствие/чат, комнаты чата и др. В приведенной ниже таблице перечислены общие возможности, имеющиеся в ECF.

Общие возможности ECF
IPresenceContainerПредоставляет возможность установки прослушивателей сообщений о присутствии (нет на месте, доступен и т.д.), текстовых сообщений, запросов на подписку. Хорошей реализацией этого интерфейса мог бы быть любой протокол систем мгновенного обмена сообщениями (Yahoo, AIM, Gadu Gadu и др.).
ISharedObjectContainerПредоставляет возможность создания произвольных коммуникационных протоколов, обеспечивая способность передавать произвольную информацию.
IDiscoveryContainerПредоставляет способность поддерживать поиск и обнаружение оборудования (компьютеров, устройств и служб в IP-сетях). Bonjour фирмы Apple является хорошим примером возможного средства реализации этого адаптера.
IChatRoomManagerПредоставляет способность поддерживать чат-комнаты в ECF. Примерами реализаций этого интерфейса являются протоколы, поддерживающие чат-комнаты (Yahoo, XMPP, IRC, и др.).

По мере развития ECF эти адаптеры будут совершенствоваться, а также будут добавляться новые.


Пример ECF

Мы будем играть роль провайдера коммуникаций, в частности, протокола обмена сообщениями Yahoo! (YMSG). Мы будем использовать реализацию этого протокола с открытым исходным кодом jYMSG. Эта статья содержит базовую ECF-реализацию протокола YMSG через ECF-контейнер присутствия (IPresenceContainer). Выделим шаги для его реализации и для предоставления доступа к конечному коду для загрузки. (Отметим, что этот код, вероятнее всего, удалят после предоставления в проект ECF.) Реализация контейнера присутствия для YMSG предусматривает выполнение следующих шагов:

  1. Определение и регистрация Namespace
  2. Реализация ID
  3. Реализация Container
  4. Определение и регистрация ContainerInstantiator
  5. Реализация IPresenceContainer, Yahoo-стиль

Пространства имен и идентификаторы

Пространства имен отвечают за создание новых экземпляров ID через IDFactory ECF. Им дается возможность ограничивать тип создаваемых через фабрику экземпляров ID. В нашей реализации YahooNamespace мы делаем их простыми, требуя для создания ID только имя пользователя.


Листинг 1. YahooNamespace.java

public class YahooNamespace extends Namespace {
...
	public ID createInstance(Class[] argTypes, Object[] args) \
	throws IDInstantiationException {
		try {
			return new YahooID(this, (String) args[0]);
		} catch (Exception e) {
			throw new IDInstantiationException\
			("Yahoo ID creation exception", e);
		}
	}
}

Нам также необходимо убедиться в том, что мы правильно зарегистрировали пространство имен, для того чтобы ECF знал о нем. Это выполняется через точку расширения org.eclipse.ecf.namespace.


Листинг 2. plugin.xml

   <extension
         point="org.eclipse.ecf.namespace">
      <namespace
            class="org.eclipse.ecf.provider.yahoo.identity.YahooNamespace"
            description="Yahoo Namespace"
            name="ecf.yahoo"/>
   </extension>	
	

После создания пространства имен мы создаем идентификатор YahooID, используемый для уникальной идентификации сущности в пространстве имен Yahoo! (см. раздел "Загрузка").

Контейнеры

В нашем случае ориентированного на соединения клиент-серверного сценария ECF-контейнеры представляют понятие коммуникационной сессии. Мы будем реализовывать интерфейс IContainer и сделаем YahooContainer адаптируемым к интерфейсу IPresenceContainer. В листинге 3 приведен фрагмент важных методов.


Листинг 3. YahooContainer.java

public class YahooContainer implements IContainer {
...
private Session session; // jYMSG-сессия
...
	public void connect(ID targetID, IConnectContext connectContext)
		throws ContainerConnectException {
		String password = getPassword(connectContext);
		this.targetID = (YahooID) targetID;
		try {
			// вход в систему обмена сообщениями yahoo
			session.login(this.targetID.getUsername(), password); 
		}
...
		// прослушивание событий системы обмена сообщениями yahoo
		session.addSessionListener(new YahooSessionListener(presenceContainer));
		// предупредить ECF о нашем подключении
		presenceContainer.fireContainerJoined(getConnectedID());
	}
...
	public Object getAdapter(Class serviceType) {
		if (serviceType.equals(IPresenceContainer.class)) {
			return presenceContainer;
		}
		return Platform.getAdapterManager().getAdapter(this, serviceType);
	}
...

В приведенном выше коде мы соединились с сервером системы обмена сообщениями Yahoo! и предупредили ECF о нашем успешном соединении. Также обратите внимание на то, что мы адаптировались к интерфейсу IPresenceContainer в методе getAdapter.

Создатели экземпляров контейнеров

Создатели экземпляров контейнеров - это простые классы, ответственные за (вы догадались) создание ECF-контейнеров. Для того чтобы быть cоздателем экземпляров контейнеров, вы должны реализовать интерфейс IContainerInstantiator. В листинге 4 приведен простой YahooConstainerInstatiator. Это не сложно.


Листинг 4. YahooContainerInstantiator.java

public class YahooContainerInstantiator implements IContainerInstantiator {
	
	public IContainer createInstance(
	ContainerDescription description, 
	Class[] argTypes, 
	Object[] args) throws ContainerInstantiationException {
		ID guid;
		try {
			guid = IDFactory.getDefault().createGUID();
		} catch (IDInstantiationException e) {
			throw new ContainerInstantiationException\
			("Exception creating ID",e);
		}
		return new YahooContainer(guid);
	}
	
}
	

IPresenceContainer

YahooPresenceContainer - это наиболее активный класс в нашем арсенале. Для простоты мы рассмотрим некоторые методы (листинг 5).


Листинг 5. YahooPresenceContainer.java

public class YahooPresenceContainer implements IPresenceContainer {
...
	public IMessageSender getMessageSender() {
		return new IMessageSender() {
			public void sendMessage(
					ID fromID, 
					ID toID, 
					Type type, 
					String subject,
					String messageBody) {
				try {
					session.sendMessage\
					(toID.getName(), messageBody);
				} catch (IllegalStateException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		};
	}

	public void handleMessageReceived(SessionEvent event) {
		for(int i = 0; i < messageListeners.size(); i++) {
			IMessageListener l = (IMessageListener) messageListeners.get(i);
			ID from = makeIDFromName(event.getFrom());
			ID to = makeIDFromName(event.getTo());
			l.handleMessage(
					from, 
					to, 
					IMessageListener.Type.NORMAL, 
					event.getFrom(), 
					event.getMessage());
		}
	}
...
}

Обратите внимание на то, что мы реализовали метод getMessageSender для передачи сообщений пользователям. В нашем случае мы используем Yahoo Session и передаем соответствующее сообщение. Также мы имеем вспомогательный метод под названием handleMessageReceived, ответственный за предупреждение IMessageListeners о нашем контейнере присутствия, при получении сообщения от пользователя Yahoo.

Существуют и другие необходимые методы в YahooPresenceContainer, преднамеренно установленные в null для простоты (или jYMSG API ограничивает нас). Такими методами являются:

  • getAccountManager - Отвечает за действия, которые имеют дело с обслуживанием учетной записи (изменение паролей, создание учетных записей и т.д.)
  • getPresenceSender - Отвечает за предупреждение заинтересованных пользователей об изменениях состояния вашего присутствия (отсутствует/доступен, добавляет партнера и т.д.)
  • getChatRoomManager - Отвечает за управление чат-комнатами (например, чат-приемными Yahoo)

В качестве упражнения мы рекомендуем реализовать поддержку чат-комнаты через метод getChatRoomManager.

После реализации всех компонентов для тестирования функциональности нашего провайдера мы просто используем возможности, предоставляемые ECF (см. рисунок 3).


Рисунок 3. ECF-провайдер Yahoo
Рисунок 3. ECF-провайдер Yahoo

Заключение

Будущее ECF ясно - расширение использования совместных вычислений и появление таких функциональных возможностей как VoIP и видеоконференции. Кроме того, ходят слухи о том, что Eclipse Foundation использует ECF для дальнейшей поддержки совместной работы своих разработчиков через более совершенные инструментальные средства.

Мы предоставили вам краткий обзор ECF и пример, демонстрирующий одну из многих функциональных возможностей, предоставляемых этой средой. Мы надеемся, что в будущем вы найдете много применений для ECF и подумаете о пополнении проекта своими материалами.

Благодарности

Автор благодарит Скота Льюиса (Scott Lewis) и команду ECF за их поддержку во время работы над этой статьей.



Загрузка

ОписаниеИмяРазмерМетод загрузки
Yahoo ECF Provideros-ecl-commfwk_org.eclipse.ecf.provider.yahoo.zip142KBHTTP

Информация о методах загрузки


Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Об авторах

Крис Анищук

Крис Анищук (Chris Aniszczyk) работает инженером-программистом в IBM Lotus и учится по программе интернатуры IBM Extreme Blue. Он искренний энтузиаст открытого исходного кода, работает с дистрибутивом Gentoo Linux (http://www.gentoo.org) и является участником проекта Eclipse Modeling Framework Technology (EMFT).

Борна Сафабахш (Borna Safabakhsh) работает инженером-программистом в IBM Tivoli Security и учится по программе интернатуры IBM Extreme Blue. Являясь сторонником использования возможностей информационных технологий для решения проблем, он исследует новые подходы и приложения для ответов на сегодняшние и завтрашние вопросы. Является фанатом мотоспорта и всех прочих "быстрых" вещей.

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

(Должно содержать от 3 до 31 символа.)


Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Технология Java, Open source
ArticleID=146209
ArticleTitle=Начало работы с Eclipse Communication Framework
publish-date=03142006
author1-email=zx@us.ibm.com
author1-email-cc=
author2-email=borna@us.ibm.com
author2-email-cc=