Часть 3
(Окончание. Начало в №24)
Ультрасовременная классика
Как мы отметили в предыдущем разделе, процесс создания Web-службы является достаточно трудоемким, а развертывание Web-службы обычно требует наличия сервера приложений. Поэтому далеко не каждый читатель сможет создать и запустить службу у себя дома. Кроме того, сама природа Web-служб предполагает обмен сообщениями с удаленными компьютерами. Учитывая все это, а также ограничения на объем данного материала, мы приводим в статье лишь пример клиентского приложения, которое будет вызывать Web-службу, развернутую в интернете на сервере www.xmethods.net. Данный демонстрационный ресурс содержит большую коллекцию готовых к использованию развернутых Web-служб, выполняющих самые различные функции. С их помощью вы можете, например, мгновенно узнать погоду и температуру в любой точке земного шара, послать SMS-сообщение на мобильный телефон, получить последние новости и курсы валют или даже определить, какому произведению Шекспира принадлежит любимая вами цитата и каким персонажем она была произнесена. Мы, однако, обратимся к другому, быть может, менее эффектному, но зато гораздо более известному примеру.
Чтобы быть современным, необходимо знать классику. Именно поэтому в нашей статье мы обсудим ставший уже классическим для технологии Web-служб пример с получением котировок акций компаний (stock quotes). Текущие курсы акций компаний на бирже всегда представляют интерес для игроков на бирже, брокеров, владельцев акций, а ввиду небывалых скачков курсов и индексов на фондовом рынке в последние месяцы этот пример только набирает актуальность.
Итак, предположим, у нас есть некая распределенная система, и назрела необходимость обрабатывать или отображать в этой системе информацию о текущих курсах акций различных компаний. Может быть, нам надо программно проанализировать эти курсы, чтобы принять некое решение (купить/продать те или иные акции), а может быть, мы просто содержим интернет-портал и хотим предоставить пользователям информацию о курсах через браузер, как это описано в [2]. В любом случае при полном отсутствии специальных средств и технологий для решения этой задачи нам придется попотеть. Выбрав компанию, которая владеет информацией о нужных курсах, нам нужно будет решить вопрос с физической линией, по которой будут передаваться данные. Далее, необходимо совместно с поставщиком данных оговорить протокол, а также формат данных, по которому они будут передаваться. Кроме того, надо будет написать специальные программы на обеих сторонах, которые позволяли бы обмениваться данными о курсах. Все это, очевидно, весьма и весьма трудоемко, дорого и неудобно.
Изящное и универсальное решение этой задачи дает нам технология Web-служб. Она позволяет использовать стандартный протокол HTTP для обмена XML-сообщениями в формате, определяемом протоколом SOAP. Поставщик данных о курсах акций один-единственный раз развертывает Web-службу, а далее любые заинтересованные стороны смогут стандартным образом осуществить вызов этой службы.
Поставщик службы может также создать описание своей службы на языке WSDL и опубликовать его в UDDI-реестре. После этого все желающие смогут осуществить поиск в реестре, найти нужную им службу и вызвать ее. К сожалению, формат статьи не позволяет нам подробнее обсудить особенности языка WSDL. Отметим только, что с WSDL-описанием Web-службы для нашего примера ознакомиться можно по адресу services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl. В этом файле содержится описание как интерфейса, так и реализации Web-службы.
Java-клиент для Stock Quote Web-службы
В настоящем разделе мы приведем пример клиентского приложения, вызывающего Stock Quote Web-службу. Как вы, наверное, уже догадываетесь, служба будет возвращать нам текущее значение курса акций для компании, чье имя мы будем передавать ей в качестве параметра.
Как мы отмечали в предыдущей части статьи, на сегодняшний день существуют две основные платформы для создания распределенных приложений - J2EE (Java2 Enterprise Edition) и Microsoft .Net. Важным элементом каждой из этих платформ является поддержка технологии Web-служб. В данной статье мы проиллюстрируем создание клиента Web-службы для платформы J2EE. Эта платформа является открытой, для нее существуют свободно распространяемые библиотеки и продукты, позволяющие создавать и устанавливать Web-службы без необходимости приобретения дорогостоящих средств разработки, серверов приложений и т.д. На сегодняшний день только эта платформа позволяет создавать распределенные приложения, которые действительно могут надежно, безопасно и устойчиво работать на любых программных и аппаратных платформах.
Приведенный ниже фрагмент клиентского приложения для вызова Web-службы использует API популярной open-source реализации протокола SOAP, которая называется Axis и разработана в рамках проекта некоммерческой организации Apache (xml.apache.org/axis).
public float getQuote(String args[]){ /*опускаем проверку корректности переданных аргументов */ symbol = args[0]; Float res = new Float(0.0F); /* создаем новый объект типа "служба" */ Service service = new Service(); /* создаем объект для удаленного вызова, инициализируем его адресом, на котором работает слушатель Axis, именами службы и операции, типами параметров, а также значением входного параметра */ Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new URL ("http://services.xmethods.com:80/soap")); call.setOperationName(new QName ("urn:xmethods-delayed-quotes","getQuote")); call.addParameter("symbol", XMLType.XSD_STRING, ParameterMode.IN); call.setReturnType (XMLType.XSD_FLOAT); /* Вызываем удаленную службу */ Object result = call.invoke(new Object[] { symbol }); /* Пропускаем проверку возможной исключительной ситуации */ /* Возвращаем успешно полученное значение */ res = (Float) result; return res.floatValue();}
Приведенное выше клиентское приложение использует API Axis для того, чтобы создать SOAP-сообщение и передать его по протоколу HTTP на сервер, где оно принимается сервлетом, входящим в серверную часть пакета Axis. Далее Axis разбирает сообщение и вызывает нужную Web-службу.
С полной версией описанного выше класса можно ознакомиться, скачав zip-файл с клиентским приложением для нашего примера по адресу krazum.narod.ru. В нем содержится все необходимое для того, чтобы запустить клиентское приложение с вашего компьютера без скачивания и установки дополнительных библиотек. В корневом каталоге архива содержится текстовый файл Readme.txt, содержащий пошаговые инструкции, необходимые для запуска примера. Для выполнения приложения на компьютере должна быть установлена среда выполнения Java (Java Runtime Environment, JRE).
О чем мы не рассказали
Хотелось бы отметить, что наша серия статей является всего лишь введением в технологию Web-служб. Мы рассмотрели Web-службы с высоты птичьего полета, не затронув многих связанных с ними серьезных проблем и вопросов. Ниже мы приводим три важных примера таких проблем. Каждая из них заслуживает отдельного разговора, мы упоминаем их здесь только для того, чтобы подчеркнуть, насколько широким является спектр вопросов, связанных с Web-службами.
Как известно, распределенная архитектура наряду с массой достоинств (повышенная мощность и надежность системы и т.д.) имеет и определенные недостатки, главными из которых являются трудность интеграции программных компонентов системы и проблема обеспечения безопасности. Web-службы с успехом используются для решения первой из этих проблем, о чем уже было достаточно сказано выше. Что же касается безопасности, то эта проблема вызвана необходимостью передачи данных по сети между различными физическими устройствами, входящими в систему. В процессе этой передачи данные могут быть похищены или подвергнуты искажению заинтересованными злоумышленниками. На сегодняшний день уже разработан комплекс спецификаций и решений, направленных на предотвращение этих нежелательных явлений. Так, в апреле 2002 года IBM, Microsoft и VeriSign выпустили совместную спецификацию WS-Security, определяющую, как расширить протокол SOAP, чтобы обеспечить конфиденциальность, целостность и аутентификацию при передаче сообщений.
Еще одним важным практическим вопросом является проблема хостинга Web-служб. На сегодняшний день в мире научились создавать Web-службы, и вопрос теперь состоит в том, как их оптимальным образом использовать и продавать. Как мы отмечали, Web-службы предлагают новый взгляд на программное обеспечение, в рамках которого отдельные программные компоненты рассматриваются как службы, доступ к которым может быть получен динамически. Однако доступ этот должен быть, вообще говоря, не бесплатным. Встает вопрос о том, что необходимо поместить Web-службы в некоторую среду, которая позволяла бы всем заинтересованным сторонам находить их, подписываться на их использование (заключать контракты) и осуществлять вызов служб. Среда должна обрабатывать обращения к Web-службам, осуществлять аутентификацию и авторизацию пользователей и начислять плату за использование служб в соответствии с оговоренными в контракте правилами, а затем выставлять счет пользователям служб. Действия по созданию и настройке описанной выше среды и размещении Web-службы в ее пространстве называют обеспечением (provisioning) Web-службы. На сегодняшний момент не существует готовых решений, реализующих все аспекты обеспечения служб. В ближайшем будущем ожидается выход анонсированного IBM продукта Services Provisioning Manager, отчасти решающего эту задачу.
Наконец, нельзя не упомянуть проблемы составления композиций Web-служб. Выше мы описали, как создать отдельно взятую Web-службу, однако реальные системы могут содержать не одну, а десятки Web-служб, которые должны вызываться (или вызывать друг друга) в некотором порядке, определяемом бизнес-процессом, для автоматизации которого мы создаем программную систему. Возникает идея построения потока задач (workflow), элементарными компонентами которого будут выступать Web-службы. Эта идея воплощена, например, в предложенном IBM, Microsoft, BEA и SAP языке BPEL4WS (Business Process Execution Language for Web Services). Этот, основанный на XML, язык предлагает синтаксис для создания описаний бизнес-процессов, реализованных в виде набора взаимодействующих Web-служб. Данное направление является весьма важным и перспективным, в настоящий момент консорциум W3C ведет работу по созданию единого стандарта, определяющего, как строить композиции из Web-служб.
Выведение из введения
Перечень проблем, затронутых в нашем введении, является далеко не полным. Web-службы - это технология, все еще находящаяся на стадии становления. Без сомнения, в ближайшие месяцы и годы в этой области грядут большие перемены, появятся новые концепции, спецификации и продукты. Главным в нашей серии статей было донести до читателя основные принципы технологии Web-служб, ибо, как известно, знание некоторых принципов легко возмещает незнание некоторых фактов.
Константин
РАЗУМОВСКИЙ,
[email protected]
Ссылки:
- www-3.ibm.com/software/solutions/ webservices/pdf/WSDC.pdf - Web Services Development Concepts - официальный документ корпорации IBM, предлагающий высокоуровневое описание процесса разработки Web-служб.
- www.javable.com/javaworld/03_02/01 - перевод статьи из журнала JavaWorld, рассказывающей о противостоянии двух платформ, поддерживающих Web-службы: J2EE и .Net.
- www.javable.com/columns/webserv - русскоязычный ресурс, посвященный технологии Web-служб.
Горячие темы