IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  Lotus  >

Разработка OSGi-службы как Web-службы в IBM Lotus Expeditor

developerWorks
Опции документа

Опции документа, требующие включения JavaScript, не отображаются

Обсудить


Выскажите мнение об этой странице

Помогите нам улучшить содержание


Уровень сложности: средний

Джон Хсу, инженер-программист, IBM

09.04.2007

Узнайте, как программно отобразить работающую в IBM Lotus Expeditor OSGi-службу в виде Web-службы, используя Lotus Expeditor Toolkit и IBM Rational Application Developer V6. В данной статье также рассматривается, как развернуть и протестировать службу при помощи исполняющей среды Lotus Expeditor.

IBM Lotus Expeditor (прежде IBM WebSphere Everyplace Deployment) представляет собой клиентскую интегрированную среду промежуточного уровня и инструментальную платформу, предоставляющую подключение, независимую доставку и управление приложениями и службами. Lotus Expeditor построен на интегрированной среде OSGi (Open Service Gateway initiative) и предоставляет клиентам такие J2EE-службы, как Web-службы и Enterprise JavaBeans (EJBs). Таким образом можно переместить ключевые компоненты приложений на клиентский компьютер. Также Lotus Expeditor позволяет приложениям выполнять локально большую часть бизнес-операций, поэтому мобильные пользователи могут продолжать использовать свои приложения, даже если не имеют возможности подключиться к сети и выполнить синхронизацию с сервером, когда он станет доступен.

Lotus Expeditor соответствует спецификации "JSR-172: J2ME Web-службы" для предоставления поддержки Web-служб, а также обеспечивает некоторые функциональные возможности, не входящие в спецификацию JSR-172. Одной из таких возможностей является шлюз IBM WebSphere Web Services Gateway, который отображает OSGi-службы в Web-службы и наоборот. Следовательно, используя Java APIs для JAX-RPC (XML-based Remote Procedure Call), работающие вне Lotus Expeditor приложения могут активизировать OSGi-службы, выполняющиеся в Lotus Expeditor.

Lotus Expeditor предоставляет программу Web Services Gateway Utility, для того чтобы помочь пользователям отобразить их OSGi-службы в виде Web-служб через пользовательские интерфейсы полнофункционального клиентского приложения. Но в некоторых случаях это может быть неудобно. Например, при разработке приложения и возникновении необходимости распространить его нескольким клиентам, очевидно, не хотелось бы сообщать каждому клиенту, чтобы он запустил программу Web Services Gateway Utility и вручную активизировал службу. Желательно делать это программным способом. В данной статье рассказывается, как разработать простой пакет OSGi-службы и отобразить его в виде Web-служб, используя набор инструментальных средств разработки, предоставленных в Lotus Expeditor.

Предварительные условия

Для наилучшего усвоения материалов данной статьи необходимо наличие опыта работы с Java, J2EE, Web-службами, интегрированной средой OSGi, а также опыта разработки подключаемых модулей с использованием IBM Rational Application Developer V6 для WebSphere Software или Eclipse 3.x. Для выполнения перечисленных ниже действий необходимы установленные программы Rational Application Developer V6 или Eclipse 3.2 с Lotus Expeditor Toolkit V6.1. Также понадобится установленный Lotus Expeditor Client.

Пробную версию Rational Application Developer V6 можно загрузить с сайта developerWorks.

В данной статье выполняются следующие задачи:

  • Создание проекта Client Services, регистрирующего OSGi-службу.
  • Предоставление OSGi-службы в виде Web-службы.
  • Развертывание проекта Client Services.
  • Тестирование развернутой Web-службы.


В начало


Создание проекта Client Services, регистрирующего OSGi-службу

Начнем с создания OSGi-службы, которую можно развернуть как Web-службу. В Lotus Expeditor Toolkit это делается путем создания проекта Client Service. В данной статье предполагается, что у вас уже установлены программы Rational Application Developer и Lotus Expeditor Toolkit. Lotus Expeditor Toolkit расширяет интегрированную среду Rational Application Developer и предоставляет возможность создавать основанные на OSGi и Eclipse приложения.

Для создания OSGi-службы выполните следующие действия в Rational Application Developer (помните, что это же самое вы можете сделать в Eclipse при наличии установленной программы Lotus Expeditor Toolkit):

  1. В Rational Application Developer перейдите в перспективу Plug-in Development, выбрав Window - Open Perspective - Plug-in Development.
  2. Выберите File - New - Project.
  3. В мастере New Project выберите Client Services Project и затем нажмите кнопку Next (см. рисунок 1).

    Рисунок 1. Мастер New Project
    Рисунок 1. Мастер New Project


  4. В панели Client Service Project введите WSGateway в поле Project name, а затем нажмите кнопку Next.
  5. В следующей панели мастера оставьте настройки по умолчанию и нажмите кнопку Finish.
  6. После создания проекта Client Service выберите File - New - Interface и введите имя интерфейса OSGiService и имя пакета wsgateway. Rational Application Developer создаст public-интерфейс OSGiService. В листинге 1 показан исходный код интерфейса. Метод getResult - это тестовый метод. Поскольку разрабатывается OSGi-служба, которая предоставляется в виде Web-службы, обе эти службы нуждаются как минимум в одном public-методе для вызова друг друга.

    Листинг 1. Интерфейс OSGiService
    package wsgateway;
    
    public interface OSGiService {
    	public String getResult();
    }

  7. Затем выберите File - New - Class и введите класс OSGiServiceImpl и имя пакета wsgateway. При создании OSGi-службы или Web-службы обычно создаются классы интерфейса и реализации. Это наилучший подход, делающий код более гибким, что, впрочем, совсем не обязательно. Можно создать класс и зарегистрировать его как OSGi-службу и как Web-службу. Это не запрещается в Lotus Expeditor Toolkit, однако не рекомендуется. В листинге 2 приведен код реализации класса.

    Листинг 2. Класс OSGiServiceImpl
    package wsgateway;
    
    public class OSGiServiceImpl implements OSGiService {
    	public String getResult() {
    		return "This is OSGiServiceImpl";
    	}
    }

  8. Добавьте код листинга 3 в метод start() класса Activator.java, чтобы зарегистрировать OSGiService для интегрированной OSGi-среды:

    Листинг 3. Activator.java
    public void start(BundleContext context) throws Exception {
    	super.start(context);
         Hashtable properties = new Hashtable(7);
     
    properties.put(Constants.SERVICE_PID, wsgateway.OSGiService.class.getName());
    
    context.registerService(wsgateway.OSGiService.class.getName(), new OSGiServiceImpl(),_
    properties);
    	}

  9. После этого можно запустить проект Client Services, для того чтобы определить, может ли он зарегистрировать службу в интегрированной OSGi-среде. В Rational Application Developer выберите Run - Run.
  10. В диалоговом окне Run выберите Client Services и нажмите кнопку New.
  11. Выберите закладку Plug-ins, снимите отметку с Workspace Plug-ins и выберите WSGateway (см. рисунок 2).
  12. Нажмите кнопку Add Required Plug-ins, а затем кнопку Run.

    Рисунок 2. Диалоговое окно Run закладки Plug-ins
    Рисунок 2. Диалоговое окно Run закладки Plug-ins


  13. Перейдите в закладку Console, введите ss и найдите номер пакета (bundle number) WSGateway (см. рисунок 3).

    Рисунок 3. Закладка Console
    Рисунок 3. Закладка Console


  14. После определения номера пакета WSGateway введите в консоли команду start xxx, где xxx - это найденный номер пакета WSGateway.
  15. Затем введите в консоли s и убедитесь, что wsgateway.OSGiService зарегистрирован в интегрированной OSGi-среде (см. рисунок 4).

    Рисунок 4. В консоли отображается wsgateway.OSGiService
    Рисунок 4. В консоли отображается wsgateway.OSGiService




В начало


Предоставление OSGi-службы в виде Web-службы

После создания OSGi-службы и успешной регистрации ее в интегрированной OSGi-среде можно предоставить OSGi-службу как Web-службу. Добавьте следующий код (листинг 4) в метод start() класса Activator.java:


Листинг 4. Activator.java
public void start(BundleContext context) throws Exception {
	super.start(context);
     Hashtable properties = new Hashtable(7);
     WebServiceProvider provider;
		
String providerName = "com.ibm.pvcws.osgi.proxy.WebServiceProvider";
ServiceReference ref = context.getServiceReference(providerName);
provider = (ref == null) ? null : (WebServiceProvider)context.getService(ref);

properties.put(Constants.SERVICE_PID, wsgateway.OSGiService.class.getName());

context.registerService( wsgateway.OSGiService.class.getName(), new OSGiServiceImpl(),_
properties);

/*	provider.exportPid(wsgateway.OSGiService.class.getName());

System.out.println(wsgateway.OSGiService.class.getName() + " exposed as a Web Service at_
http://localhost:8777/ws/pid/" + wsgateway.OSGiService.class.getName());*/
		
ref = context.getServiceReference (wsgateway.OSGiService.class.getName());
	String sid = ref.getProperty("service.id").toString();
	provider.exportSid(sid);
	System.out.println(wsgateway.OSGiService.class.getName() + " 
exposed as Web Service at http://localhost:8777/ws/sid/" + sid);
}

Обратите внимание на то, что существует два способа предоставить OSGi-службу в виде Web-службы: sid или pid службы. Выделенный в предыдущем листинге жирным шрифтом код является общим для обоих методов, а последние строки кода, начинающиеся с ref = context.getServiceReference (wsgateway.OSGiService.class.getName());, предназначены для метода sid. Закомментированный код - для метода pid.

Выполните импорт com.ibm.pvcws.service.WebServiceProvider в Activator.java, откройте MANIFEST.MF, находящийся в папке META-INF, и перейдите в закладку Dependencies (см. рисунок 5).


Рисунок 5. Закладка Dependencies
Рисунок 5. Закладка Dependencies

В разделе Required Plug-ins нажмите кнопку Add. В диалоговом окне Plug-in Selection введите com.ibm.pvcws.osgi в поле Select a Plug-in и нажмите кнопку OK.



В начало


Развертывание проекта Client Services

Вы закончили работу по добавлению необходимого кода и настроек конфигурации для предоставления OSGi-службы в виде Web-службы. Теперь нужно развернуть проект Client Services в исполняющей среде Lotus Expeditor. В отличие от обычных J2SE-приложений, которые нужно запускать с java.exe, большинство J2EE-приложений должно быть развернуто на сервере J2EE-приложений. В данной статье мы выполним развертывание в исполняющей среде Lotus Expeditor, которая предоставляет некоторые функции сервера J2EE-приложений.

Выполните следующие действия для развертывания проекта Client Services:

  1. Повторите шаги с 9 по 13, описанные выше в разделе "Создание проекта Client Services, регистрирующего OSGi-службу" (пропустите шаг 10, поскольку конфигурация уже имеется). На шаге 11 выберите закладку Arguments и измените настройку -Dcom.ibm.pvc.webcontainer.port=0 на 8777 (см. рисунок 6).

    Рисунок 6. Закладка Arguments
    Рисунок 6. Закладка Arguments


  2. В консоли найдите com.ibm.pvcws.osgi и org.eclipse.equinox.http и запустите их.
  3. Опять же в консоли найдите WSGateway и запустите его.
  4. Откройте Web-браузер и введите URL, отображенный в консоли. Если все сделано правильно, вы должны увидеть страницу Web Services Description Language (WSDL) (см. рисунок 7).

    Рисунок 7. WSDL в Web-браузере
    Рисунок 7. WSDL в Web-браузере




В начало


Тестирование развернутой Web-службы

Теперь, после развертывания Web-службы, необходимо проверить ее. Lotus Expeditor Toolkit предоставляет простой способ сделать это. Поскольку имеется WSDL-файл, Lotus Expeditor Toolkit может проанализировать его и сгенерировать необходимый код-заглушку (stub) в соответствии с JSR 172; затем можно использовать эти заглушки для тестирования Web-службы.

Для тестирования развернутой Web-службы выполните следующие действия:

  1. Повторите шаги с 1 по 5, описанные выше в разделе "Создание проекта Client Services, регистрирующего OSGi-службу", для создания еще одного проекта Client Services под названием WSGatewayClient.
  2. Выберите File - New - Other.
  3. Выберите Client Services - Mobile Web Services - Mobile Web Services Client и нажмите кнопку Next (см. рисунок 8).

    Рисунок 8. Мастер New
    Рисунок 8. Мастер New


  4. Укажите следующие значения в полях диалогового окна Mobile Web Service Client (см. рисунок 9):


    Рисунок 9. Диалоговое окно Mobile Web Services Client
    Рисунок 9. Диалоговое окно Mobile Web Services Client


  5. Нажмите кнопку Next, а затем Finish.
  6. В методе consumeService() класса Activator.java в WSGatewayClient добавьте код, показанный в листинге 5. Этот код вызывает заглушки, сгенерированные программой Lotus Expeditor Toolkit.

    Листинг 5. consumeService()
    private void consumeService() throws Exception {
    wsgatewayclient.OSGiServiceSoap_Stub stub = new wsgatewayclient.OSGiServiceSoap_Stub();
    		System.out.println(stub.getResult());
    	}

  7. Убедитесь в том, что служба WSGateway использует метод pid для предоставления Web-службы. Если используется sid, необходимо проверить корректность номера sid в WSDL URL при создании клиентского приложения, поскольку он может измениться при добавлении -clean в качестве аргумента программы.
  8. Остановите исполняющую среду Lotus Expeditor, запущенную в предыдущем разделе, и запустите ее снова, повторив шаги с 1 по 3, описанные в разделе "Развертывание проекта Client Services". На шаге 1 выберите WSGateway и WSGatewayClient.
  9. Введите ss для поиска ID пакета WSGatewayClient и запустите его. Вы должны увидеть на закладке console результат, показанный на рисунке 10.

    Рисунок 10. Console
    Console




В начало


Резюме

В данной статье мы рассмотрели, как программно предоставить OSGi-службу, выполняющуюся в Lotus Expeditor, в виде Web-службы при помощи программы Lotus Expeditor Toolkit, установленной в Rational Application Developer. Хотя это можно сделать и с использованием GUI-программ на одном клиентском компьютере, программный способ окажет существенную помощь при необходимости выполнения нескольких установок или для автоматического обновления подобной службы на нескольких клиентских местах. Эта функциональная возможность помогает также предоставить любую службу, выполняющуюся в Lotus Expeditor, в виде Web-службы и, таким образом, активизировать ее извне Lotus Expeditor. Это означает, что Lotus Expeditor обеспечивает хорошую способность к взаимодействию с другими приложениями - одна из причин, делающих Lotus Expeditor хорошей интегрированной системой для создания решений, ориентированных на использование служб (Service-Oriented Architecture).



Ресурсы

Научиться

Обсудить


Об авторе

Джон Хсу (John Hsu) работает инженером-программистом в IBM China Software Development Lab в Тайпее, Тайвань. Джон занимается созданием программного обеспечения и тестированием, а в настоящее время разрабатывает Lotus Expeditor.




Выскажите мнение об этой странице


Пожалуйста, найдите минутку и заполните форму, чтобы повысить уровень сервиса.



ДаНетНе знаю
 


 


12345
 


В начало


IBM обладает всеми авторскими правами касательно информации, расположенной на developerWorks. Использование информации приведенной на этом ресурсе без явного письменного разрешения от IBM или первоначального автора запрещены. Если Вы желаете использовать информацию с developerWorks, пожалуйста воспользуйтесь регистрационной формой для того, чтобы связаться с нами запрос на использование материалов developerWorks Россия.


    IBM в РоссииКонфиденциальностьКонтакты