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

developerWorks Россия  >  Lotus  >

Использование Web-сервисов с помощью Java-агента Lotus Domino

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

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

Обсудить

Исходные тексты примера


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

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


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

Йоахим Дажеро, системный архитектор и технический директор, Strand Interconnect

08.12.2006

Новая функция в IBM Lotus Domino 7 – графический элемент "Web-сервис" – отличный способ сделать сервисы доступными всему миру. Но знаете ли вы, насколько просто использовать среду разработки Apache Axis для работы с Web-сервисами. Узнайте о преимуществах технологий Apache Axis и Lotus Domino 7 для создания потребителя Web-сервиса (Web service consumer).

Web-сервис - это система, допускающая взаимодействие двух или более компьютеров внутри сети. Главное преимущество такой системы в том, что она представляет собой стандартное решение для пересылки объектов между множеством компьютеров с различными операционными системами и серверами приложений. Например, с помощью Web-сервисов наша компания публикует в локальной сети, созданной на основе IBM Lotus Domino, статьи из компьютера, на котором запущена среда разработки Microsoft.NET. Недавно мы завершили еще один проект, предоставляющий отчеты в качестве Web-сервиса на сервере Lotus Domino 7. Сервер приложений на основе Java считывал данные с сервера отчетов, и единственным, что пришлось согласовывать, был WSDL-файл).

Из этой статьи вы узнаете, как создать Java-агента Domino для пользования Web-сервисом. Здесь используется Apache Axis для создания Java-заглушек и чтения WSDL-файла. Мы предоставляем модель базы данных, содержащей Web-сервис, к которой вы можете обращаться по мере прочтения этой статьи. Более подробную информацию смотрите в разделе Downloads.

Эта статья рассчитана на опытного разработчика ПО Lotus Notes и Domino, знакомого с новым графическим элементом Domino "Web-сервис". Более подробную информацию о новом графическом элементе Domino "Web сервис" смотрите в статье developerWorks Lotus "Web-сервисы Lotus Notes/Domino 7."

Компоненты Web-сервиса

Web-сервис состоит из нескольких компонентов. Среди этих компонентов:

  • WSDL-файл
  • Сервис-ориентированная Архитектура (SOA)
  • Различные протоколы

WSDL-файл

WSDL является связующим элементом в устройстве Web-сервиса. Каждый Web-сервис публикует WSDL-файл, содержащий информацию о методах и параметрах, которыми он может оперировать, а также о том, какие объекты возвращают различные методы. К этой статье прилагается база данных (в нашем примере – база данных Lotus Domino 7) с простым Web-сервисом.

Даже в случае с простым Web-сервисом WSDL-файл к нему имеет очень большой размер. Одной из причин этого, конечно же, является использование WSDL-файлом расширенного формата, XML. Однако, учитывая, что WSDL-файл содержит описание всех объектов, отправляемых и получаемых Web-сервисом, его объем не кажется чрезмерным. WSDL-файл для данного образца Web-сервиса в этой статье имеет Java-класс под названием ComplexClass, который показан в следующем фрагменте кода:

<complexType name="MyComplexClass">
<sequence>
<element name="alpha" nillable="true" type="xsd:string"/>
<element name="calcA" type="xsd:int"/>
<element name="calcB" type="xsd:int"/>
<element name="result" nillable="true" type="xsd:int"/>
</sequence>
</complexType>

SOA

О сервис-ориентированной архитектуре (SOA) много говорят в последнее десятилетие. Проще говоря, SOA – это программная архитектура, которая ориентируется больше на бизнес, чем на общие технические решения. По существу это способ проектирования архитектуры для использования Web-сервисов в режиме потребитель - провайдер. Суть подхода SOA - разделить уровни таким образом, чтобы пользователи взаимодействовали с бизнес-объектами главным образом через сервисный уровень, а не напрямую.

Для получения дополнительной информации о SOA посетите страницу SOA для новичков на developerWorks Россия.

Протоколы, используемые Web-сервисами

Сообщение Web-сервиса не ограничено использованием HTTP. Оно также может использовать SMTP, Extensible Messaging and Presence Protocol (XMPP) и даже FTP. Сообщение, однако, должно соответствовать SOAP; иначе системе приема будет трудно перевести сообщение. На более старых системах вы можете найти XML-Remote Procedure Call (XML-RPC), но теперь правильнее использовать протокол SOAP.

Преимущество Web-сервисов в том, что вам не нужно обращаться к различным протоколам и стандартам: все это выполняет сервер приложений и инструменты разработки. В нашем примере, Apache Axis расшифровывает WSDL и создает для вас заглушки с Java-кодом.

Образцы базы данных

Для пользования инструментами Apache Axis вам потребуется Web-сервис, публикующий WSDL-файл. В разделе Download этой статьи находятся два образца базы данных: WebServiceConsumer.nsf и MyWebService.nsf. Имена указывают на их назначение. После загрузки MyWebService.nsf на ваш сервер Lotus Domino 7 подпишите графический элемент Web-сервиса, MyWebservice, с помощью ID, который позволяет запускать restricted agents. WebServiceConsumer.nsf используется только для справки.



В начало


Apache Axis

Apache Axis является завершенной средой разработки, включающей SOAP-серверы и множество различных инструментов для создания и использования Web-сервисов. В этой статье вы используете раздел обмена информацией и метод WSDL2Java. Но сначала вы должны инсталлировать Apache Axis.

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

Прежде чем вы сможете создать, тестировать и использовать решения, описанные в этой статье, у вас должно быть следующее:

  • Сервер Lotus Domino 7 и разработчик IBM Lotus Domino
  • Комплект для разработки ПО Java (JDK)
  • Среда разработки Apache Axis

Предполагается, что вы уже установили Lotus Domino 7, и что вам известно, как настроить и запустить Java-среду. (В разделе Resources этой статьи даны ссылки для загрузки всего необходимого.)

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

Таблица 1. Предлагаемая структура файла

Рабочее имя Путь
Путь к серверуC:\lotus\DominoR7StandAlone
JDK version 2C:\java\j2re1.4.2_09
Apache AxisC:\java\Axis
Рабочая директорияC:\java\consumer

Загрузка и инсталляция Apache Axis

После загрузки Apache Axis извлеките пакет в директорию Axis. (В таблице 1 предлагаются варианты путей.) В этой статье используются две возможности, которые предоставляет Apache Axis. Одна из них – это коммуникационные классы, о которых вам в действительности нужно знать только то, что вы импортируете их в вашу Domino-среду. Вторая возможность – это инструмент wsdl2java, с помощью которого Apache Axis может читать WSDL-файл и создавать полностью готовые Java-заглушки для всех требуемых методов и объектов.

Вы можете запустить командный процессор и начать выполнение классов Apache Axis, но на наш взгляд неудобно начинать каждую команду с пути к классу, состоящему из 100 или более символов. Решить это можно, прописав все необходимые пути к классам, необходимые для Apache Axis, в общем пути к Java-классам, но мы предпочитаем другое решение: использовать командный файл, который устанавливает пути к классам. Наш командный файл, показанный в следующем фрагменте кода, называется wsdl2java.bat, и хранится он в рабочей директории.

@echo OFF
rem *******************************************************
rem ***     wsdl2java.bat                              ****
rem *******************************************************
set AXISPATH=c:\java\AXIS\lib
set JAVAPATH=C:\java\j2re1.4.2_09
set DOMINOJAVAPATH=C:\lotus\DominoR7StandAlone\jvm\lib\ext
set CP=%AXISPATH%\axis.jar
set CP=%CP%;%AXISPATH%\commons-logging-1.0.4.jar
set CP=%CP%;%AXISPATH%\commons-discovery-0.2.jar
set CP=%CP%;%AXISPATH%\jaxrpc.jar
set CP=%CP%;%AXISPATH%\saaj.jar
set CP=%CP%;%DOMINOJAVAPATH%\mail.jar
set CP=%CP%;%DOMINOJAVAPATH%\activation.jar
set CP=%CP%;%AXISPATH%\wsdl4j-1.5.1.jar
%JAVAPATH%\bin\java -cp %CP% org.apache.axis.wsdl.WSDL2Java %1



В начало


Создание агента-пользователя Web-сервиса

Создание агента начните с получения WSDL-файла из Web-сервиса. Мы предполагаем, что вы используете прилагаемый Web-сервис, MyWebservice, и что вы продублировали его на сервере Lotus Domino 7. Для просмотра WSDL-файла укажите в браузере путь к базе данных и откройте Web-сервис с помощью команды ?WSDL, как показано на Рисунке 1.


Рисунок 1. Пример WSDL-файла при просмотре в браузере
Пример WSDL-файла при просмотре в браузере

Удостоверившись, что WSDL-файл извлечен, вы либо можете сохранить WSDL-файл в вашей рабочей директории или непосредственно указать инструментарию Apache Axis URL WSDL-ресурса в вашей сети. Теперь вы можете начинать создавать Java-заглушки из WSDL-файла.



В начало


Создание Java-файлов из WSDL-файла

Функция WSDL2Java в качестве параметра может принимать либо имя файла, как указано ниже:


C:\java\consumer>wsd12java.bat MyWebservice.xml

либо весь Uniform Resource Indicator (URI) к WSDL-файлу:


C:\java\consumer>wsd12java.bat http://localhost/mywebservice.nsf/MyWebService?WSDL

Для локальной работы загрузите и сохраните WSDL-файл с именем MyWebservice.xml в вашу рабочую директорию, как показано в первой команде.

ПРИМЕЧАНИЕ: Web-сервис, с которым мы работаем, предназначен только для демонстрации (например, не используются области имен). Поэтому вы теперь видите новую директорию с именем DefaultNamespace в вашей рабочей директории.

В результате работы wsdl2java.bat создаются пять Java-файлов:

  • DominoSoapBindingStub.java
  • HelloWorld.java
  • HelloWorldService.java
  • HelloWorldServiceLocator.java
  • MyComplexClass.java

Из этих пяти файлов только два действительно значимы для вас: HelloWorld.java и MyComplexClass.java. Остальные предназначены для выполнения запроса и анализа ответа. Если вы хотите узнать больше о среде разработки Apache Axis, мы рекомендуем Apache Axis wiki.

HelloWorld.java – это интерфейс, описывающий какими методами и параметрами может оперировать Web-сервис. MyComplexClass.java – это JavaBeans-версия объекта MyComplexClass, на который отвечает Web-сервис, когда вызывается метод getMyComplexClass().

Теперь создайте новую библиотеку скриптов в базе данных Domino 7, с помощью которой вы сможете использовать Web-сервисы.



В начало


Импорт Java-файлов в Lotus Notes

Ваш агент-потребитель Web-сервиса использует файлы, сгенерированные с помощью Apache Axis. Самый легкий способ импорта Java-файлов – создать библиотеку Java script (не путайте с JavaScriptlibrary). Импортируя файлы, не забудьте указать вашу рабочую директорию в качестве основного пути (См. рис. 2).


Рисунок 2. Библиотека скриптов для хранения Java-заглушек, сгенерированных Apache Axis
Библиотека скриптов для хранения Java-заглушек, сгенерированных Apache Axis

ПРИМЕЧАНИЕ: Важно, чтобы базовая директория была вашей рабочей директорией, не директорией DefaultNamespace.

Как только библиотека скриптов скомпилирована и находится на своём месте, вы можете ее закрыть и создать нового Java-агента. Этот агент использует классы клиента Apache Axis. Эти классы являются частью среды разработки Axis и поэтому должны быть импортированы.

Клиент Apache Axis постоянно хранится в Java-архиве (JAR-файл) директории Axis. У вас есть несколько возможностей предоставить эти классы агенту, один из них - импортировать эти классы непосредственно агенту. Но так как эти классы имеют универсальный характер (и их можно применять многократно, когда вы поймёте, как легко использовать Web-сервисы), более естественно хранить их в директории.\jvm\lib\ext вместе с другими JAR-файлами, которые использует IBM Lotus Notes.

Скопируйте JAR-файлы axis.jar, commons-discovery-0.2.jar и commons-logging-1.0.4.jar из.\Axis\lib to.\jvm\lib\ext в директорию вашего Lotus Notes-клиента. (Вы должны перезагрузить ваш клиент Lotus Notes прежде чем использовать эти добавления.) После запуска Lotus Domino Designer останется всего несколько шагов до начала вызова Web-сервиса.



В начало


Агент Lotus Notes, вызывающий Web-сервис

После того, как вы разместили JAR-файлы в своей директории .\jvm\lib\ext и перезапустили Lotus Domino Designer, вы можете кодировать агента-потребителя Web-сервиса. Начните с создания обычного Java-агента. Затем откройте окно Edit Project (Редактировать проект), чтобы импортировать библиотеку скриптов, созданную вами ранее. Закройте окно project Properties (Свойства проекта) и добавьте требуемые строки для импорта, указанные здесь:

00 import lotus.domino.*;
01 import java.net.URL;
02 import org.apache.axis.client.Call;
03 import org.apache.axis.client.Service;
04 import DefaultNamespace.*;
05 import java.io.*;
06 public class JavaAgent extends AgentBase {
07 public void NotesMain() {
08 try {
09 Session session = getSession();
10 AgentContext agentContext = session.getAgentContext();
11 
12 URL endpoint = new URL("http://localhost:80/MyWebService.nsf/MyWebService");
13 
14 Service service1 = new Service();
15 DominoSoapBindingStub service = new DominoSoapBindingStub(endpoint,service1);
16 String greeting=service.getGreeting();
17 System.out.println(greeting);
18 
19 String greeting2=service.getGreeting("Lotus");
20 System.out.println(greeting2);
21 
22 } catch(Exception e) {
23 e.printStackTrace();
24 }
25 }
26}

В строке 12 вы создаете стандартный Java URL, который указывает на Web-сервис, который вы хотите использовать. В строке 14 вы создаете экземпляр класса Service(), предоставляемого Apache Axis. Затем вы создаете экземпляр сервиса DominoSoapBindingStub в строке 15 и снабжаете его вновь созданным объектом service1 и URI из строки 12. В строке 16 вы задаете новую последовательность со значением, которое определяет метод Web-сервиса getGreeting().

Сохраните агента и запустите Java-консоль. (Теперь этот консоль является единственным местом, где вы можете увидеть какие-либо действия.) Когда окно отладки открыто, выберите вашу новую базу данных, и затем запустите агента, как показано на рисунке 3.


Рисунок 3. Java-консоль при завершении агента
Java-консоль при завершении агента

Как вы видите, применение Apache Axis и инструмента wsdl2java дает большую экономию времени. А были времена, когда вам приходилось сидеть и декодировать SOAP-сообщения вручную в агенте Lotus Domino 5 для использования Web-сервиса!



В начало


Запуск агента-потребителя Web-сервиса на сервере

Теперь у вас есть отличный агент, который может использовать Web-сервисы для обмена информацией. Например, внутренняя сеть вашей организации может подписаться на последние сводки прогнозов погоды более надёжным и верным способом, чем при помощи файлов Comma Separated Value (CSV), к которым вы привыкли. Или почему бы не начать использовать Web-сервисы, которые шли с дорогостоящей системой планирования ресурсов предприятия (ERP)?

Никакие дополнительные меры не требуются для запуска этого агента на сервере. Просто удостоверьтесь, что свойство "Set runtime security level" вашего агента установлено в положение "2. Allows restricted operations" в окне Agent Properties (Свойства агента), и что подписчик имеет соответствующий доступ.

Скопируйте необходимые JAR-файлы, как описано выше, в директорию.\jvm\lib\ext на вашем сервере Lotus Domino, и всё. Помните, однако, что возможно "зависание", если вы вызовете Web-сервис Domino на том же самом сервере, на котором запущен агент.

Заключение

Эта статья описывает, какие шаги вы нужно выполнить, чтобы заставить агента Domino использовать Web-сервисы. Пользуясь преимуществом среды разработки Apache Axis, вы можете сэкономить много времени и сосредоточиться на самом бизнесе с первого дня работы. Платформа Apache Axis используется не первый год, и характеризуется как стабильная и надежная. Использование инструментов сторонних производителей делает систему более уязвимой, но риск небольшой и несравним с тем, что может сделать хорошая SOA для вашей организации.




В начало


Загрузка

ОписаниеИмяРазмерМетод загрузки
Sample consuming Web serviceWebserviceConsumer.zip44 KBHTTP
A simple but complete Web service for testingMyWebService.zip29 KBHTTP
Информация о методах загрузкиЗагрузить Adobe® Reader®


Ресурсы

Научиться

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

Обсудить


Об авторе

Йоахим Дажеро (Joachim Dagerot) является системным архитектором и техническим директором Strand Interconnect. Он обеспечивает работу локальных сетей по всему миру, обслуживая более 130 млн. пользователей. В настоящее время он занимается преимущественно Web-разработкой, специализируясь в особенности на легкости доступа и совместимости стандартов. В прочее время он разрабатывает Web-сервисы и блоги на сайте domino.dagerot.com. Вы можете связаться с Йоахимом по адресу jd@dagerot.com.




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


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



ДаНетНе знаю
 


 


12345
 


В начало


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


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