Содержание


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

Comments

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-файл извлечен, вы либо можете сохранить 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
Библиотека скриптов для хранения 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 для вашей организации.


Ресурсы для скачивания


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Lotus
ArticleID=182799
ArticleTitle=Использование Web-сервисов с помощью Java-агента Lotus Domino
publish-date=12082006