Июнь 2004


Тема номера: Web-сервисы


Элангован Балусами

Разработка Web-сервисов Становится Легким Делом
(Web Services Development Made Easy,
by Elangovan Balusamy)

Источник: OTN (Oracle Technology Network - cеть технологий Oracle), журнал Oracle Magazine, раздел “articles read-only”, http://otn.oracle.com/oramag/webcolumns/2003/techarticles/balusamy.html

Посмотрите, как используя Oracle JDeveloper 10g, можно легко обращаться с Web-сервисами.

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

Технологические основы Web-сервисов, потоколы SOAP (Simple Object Access Protocol - Простой Объектный Протокол Доступа) и WSDL (Web services Definition Language - Язык Определения Web-сервисов), находятся в промышленной эксплуатации уже нескольких лет. За это время вызрели инструментнальные средства для построения, тестирования и развертывания Web-сервисов. В самом начале основной предпосылкой было глубокое понимание технологических основ таких, как структура SOAP-конверта, элементов SOAP-заголовка (SOAP Header) и так далее. Сегодня же, используя доступные продвинутые инструменты разработчика типа Oracle JDeveloper 10g, Web-сервис за несколько секунд может быть создан разработчиком и/или к нему может быть получен доступ без каких-либо предварительных специальных сведениях о технологиях Web-сервисов, как-то: SOAP или WSDL.

В этой статье мы рассмотрим, как получить доступ к поисковому (search) сервису и как его использовать в случае простого поиска. Для сервиса поиска (Web-сервис Provider), мы воспользуемся сервисов Google Web APIs, сгенерируем при помощи Oracle JDeveloper 10g клиентский Web-сервис и задействуем этот клиент-сервис в качестве основы для построения поискового приложения. По ходу статьи станет понятно, что Oracle JDeveloper 10g представляет собой сильный и совершенный инструмент для разработки Web-сервисов. Используя сведения, полученные из этой статьи, можно задействовать Oracle JDeveloper 10g, чтобы разрабатывать клиентские Web-сервисы и применять их в ваших приложениях.

Архитектура

Рассматриваемое простое поисковое приложение включает три компонента:

  • Web-сервис Provider (Google Web APIs [http://www.google.com/apis/ <http://www.google.com/apis/>]),
  • Web-сервис клиента и
  • пользовательский интерфейс (user interface).

Google Web APIs – провайдер (provider – поставщик) Web-сервиса, который выставил для использования этот метод поиска в виде сервиса, Web-сервис клиента будет сгенерирован с применением Oracle JDeveloper 10g, а пользовательский интерфейс, который будет сгенерирован при помощи JavaServer Pages (JSP), предназначен для ввода данных пользователя.

На вход подаются ключевые слова, по которым пользователь хочет выполнить web-поиск. При запуске (at runtime) приложение активизирует с заданными ключевыми словами локальный экземпляр Web-сервис клиента. Web-сервис клиента в свою очередь вызывает метод поиска на удаленном сервере и возвращает результаты приложению, которое отображает их пользователю.

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

Понимание Google Web API

Кто не слышал о Google? Даже самый невнимательный web-серфингист знает, что это самый популярный механизм web-поиска. С весны 2002 Google предоставляет свою мощную технологическую поисковую базу данных для реализации Google Web APIs – beta-версии web-программы, которая позволяет разработчикам легко находить и манипулировать web-информацией. Опубликовав web-интерфейс к своему сервису поиска, Google предоставил разработчикам доступ к своей богатой и массивной базе данных (хотя и не до последнего края), чтобы они создавали свои собственные интерфейсы, играли с ее продвинутыми функциональными возможностями поиска и создавали платформо-нейтральные и языково-независимые приложения с встроенными функциональными возможностями поиска. Используя SOAP (Simple Object Access Protocol - Простой Объектный Протокол Доступа) для транспортировки [данных], приложения связываются с сервисом Google Web APIs и предлагают на рассмотрение свои поисковые запросы. Затем механизм поиска Google исполняет поиск и возвращает результаты назад к приложению.

Перед тем как мы приступим к разработке приложения, необходимо зарегистрировать register [http://www.google.com/apis/] лицензионный ключ разработчика [license key - разрешительный ключ (строка в программе, разрешающая создание конкретного программного компонента) – словарь Lingvo], чтобы получить доступ к Google API. Каждый ключ разрешает обратиться к Google Web API с 1000 запросов в день. Даже если вы не пожелаете выполнить действия, предлагаемые секцией разработки в этой статье, в любом случае идите далее и регистрируйте ключ, поскольку это может понадобиться, когда вы захотите проверить какие-либо приложения третьих лиц, построенных на основе Google API. Не забудьте сохранить регистрационную информацию, поскольку когда-либо она вам понадобится, чтобы получить доступ к сервису.

Установка Oracle JDeveloper 10g

Если Oracle JDeveloper 10g еще не установлен, обратитесь к врезке "Следующие Шаги", чтобы узнать, как его скачать. Чтобы исполнить наше упражнение, также может быть использован Oracle9i JDeveloper 9.0.3.

Этот пример требует наличия связи с Интернетом или непосредственно, или через прокси-сервер. Если используется прокси-сервер, надо удостовериться, что установены прокси-опции Oracle JDeveloper 10g:

  • клик по Tools (Инструменты) -> Preferences (Предпочтения),
  • выберите Web-браузер/Proxy-узел,
  • проверьте опцию 'Use HTTP Proxy Server' ('Использование HTTP Прокси-Сервер' и настройте параметры прокси-сервера.

Генерация Web-сервиса Клиент

Для генерации Web-сервиса клиента Oracle JDeveloper 10g включает встроенный инструмент/визард (tool/wizard), который может сгенерировать клиента за несколько минут, обратившись к служебному файлу Web-сервиса Definition Language (WSDL; http://www.w3.org/TR/wsdl). WSDL-файл, используемый для написания клиентских приложений, описывает сервисы, которые предлагаются сервис-провайдером. Коль скоро прокси-опции установены, надо просто вызвать визард Web-сервиса Stub/Skeleton, чтобы сгенерировать клиента.

Затем надо выполнить следующие действия:

  1. Создание нового Рабочего пространства (Workspace) и Проекта (Project)
    • Кликнуть по File -> New, перейти к General, выбрать 'Application Workspaces' и кликнуть 'OK'. В ответ на приглашение ввести имя приложения.

    • Кликнуть по кнопке 'Edit Templates', чтобы перейти к диалогу 'Edit Templates'. Выбрать 'Empty Project' в Custom Application и переместить 'Web Services' и 'JavaServer Pages and Servlets' из Available Technologies в Selected Technologies. Кликнуть 'OK', чтобы вернуться к Workspace-визарду и кликнуть 'OK', чтобы создать новое Рабочее пространство (Workspace) и Проект (Project). В Oracle JDeveloper 10g вам не надо видеть все технологические действия, когда разрабатывается только одна конкретная область.

  2. Создание Web-сервиса клиента.

    Когда рабочее пространство и проект созданы, надо сгенерировать Web-сервис Stub/Skelton, кликнув по File -> New, выбрать General -> Web-сервисы. Выберите пункт 'Web services Stub/Skeleton' и следуйте за указаниям визарда, которые приводятся в следующих шагах.

Шаг 1: Сохраните URL для WSDL как http://api.google.com/GoogleSearch.wsdl, выберите 'Generate Main method', присвойте пакету имя по умолчанию 'search.google', а затем кликните next (следующий). При использовании Oracle JDeveloper 10g не надо скачивать WSDL на вашу локальную машину; Oracle JDeveloper 10g сгенерирует клиента от любого WSDL в Интернете.

Шаг 2: После анализа WSDL-файла Oracle JDeveloper 10g перечислит методы, которые доступны для удаленного вызова. Нас интересует только функциональность поиска, поэтому надо выбрать метод 'doGoogleSearch' и затем кликнуть 'Finish' (Конец). Используя этот же сервис можно также построить приложение проверки орфографии (spell-check), если выбрать метод 'doSpellingSuggestion ()'.

Вот и завершилась успешная генерация клиента. Создание клиентского Web-сервиса для любого Web-сервиса – это очень просто.

Oracle JDeveloper 10g генерирует класс Stub и классы поддержки, чтобы запустить Web-сервис. В нашем случае Google-сервис возвращает результаты поиска как сложные типы данных (нечто другое, нежели стандартые Java-примитивы (int, float и т.д.) или оболочные (wrapper datatypes) типы данных (Integer, Float и т.д.); поэтому вы увидете три других класса - GoogleSearchResult. java, ResultElement.java, DirectoryCategory.java в дополнение к stub. (См. Таблицу 1, в которой приведены полные описания.)

[Анатолий Бачин, главный редактор OM/RE: встреченный термин Stub поверг меня в некоторое смятение. Поскольку я не являюсь профессионалом в области Java-программирования, то я вроде бы не обязан знать, что такое stub. Но и позвольть переводчику перевести "stub" как "окурок" или "пень" я не могу. В наших же словарях этого термина я не нашел. Видно, считается, что и так понятно, тем, кто знает, а кто не знает - им и не нужно. Поэтому я предпринял некие розыски в Интернет-словарях и нашел вполне удобоприемлемые, если не переводы, то объяснения термина stub, которыми и хочу поделиться какими же специалистами из других областей.

  • Stub (http://www.webopedia.com/TERM/S/stub.html ) - Подпрограмма, которая фактически не делает ничего другого, как объявляет себя и параметры, которые она принимает. Стабы (Stubs) используются обычно как заполнители (placeholders) для подпрограмм, которые должны быть разработаны в дальнейшем. Stub содержит только необходимую часть кода, чтобы позволить компиляцию и связывание с другими частями программы.
  • Stub ( http://computing-dictionary.thefreedictionary.com/stub) - Локальная процедура для удаленного вызова процедуры. Клиент вызывает stub, чтобы исполнить некоторую задачу, и нет необходимости знать, какая RPC используется. Stub передает параметры по сети серверу и возвращает результаты вызывающему.]

Тестирование Web-сервиса для Web-сервиса Клиент Client

Коль скоро, используя Web-сервисный Stub/Skeleton-визард (Wizard), были сгенерированы клиентские классы, вы имеете stub-класс, с включенным в него главным методом. В главном методе stub-класса активизируется метод, который который нужно вызвать на удаленном сервере.

Скопируйте код из Листинг_1 и вставте его после комментария '//Add your code here' (в GoogleSearchServiceStub.java). Далее замените 'put_your_google_key_here' действительным ключом Google, который вы получили при регистрации. Кликните правой клавишей по stub-классе и выберите 'Run' ('Запуск'), чтобы запустить клиентский класс. Это активизирует поиск по ключевым словам 'Web service sample code' и отобразит в протокольном окне Oracle JDeveloper 10g список 10 лучших результатов поиска.

Понимание кода вызова GoogleSearch

Показанный ниже код создает экземпляр stub-класса.

GoogleSearchServiceStub stub = new GoogleSearchServiceStub();

Поисковый метод активизируется лицензионным ключом, строкой запроса и другими параметрами поиска. (См. Листинг_2.)

ResultElement[] result = results.getResultElements();

Результаты поиска инкапсулированы в классе ResultElement и возвращены как массив (array).

for(int i=0;i<result.length;i++)
   System.out.println(result[i].getURL());

URL соответствующих Web-результатов затем выводятся в протокольном окне.

Следующие шаги:
  • Скачайте Oracle JDeveloper:
    otn.oracle.com/software/products/JDev/index.html
  • Попробуйте применить типовое приложение Financial Brokerage Service 10g, имеющееся на OTN, которое использует сервис Google Web APIs в качестве новостного провайдера:
    otn.oracle.com/sample_code/tech/java/j2ee/
    fbs10g/index.html
  • Посетите и сделайте закладку для технологического центра (Technology Center) Web-сервисов на OTN:
    otn.oracle.com/webservices/
  • Вот мы и закончили генерацию клиентской компоненты Web-сервиса, освоив активизацию клиентското кода и протестировав сервис. В следующей секции этой статьи мы построим пользовательский интерфейс нашего приложения поиска и активизируем клиентский Web-сервис, который использует этот интерфейс (См. фигуру 1). Для того чтобы лучше узнать синтаксис запроса и возможности ограничения результатов поиска, следует обратиться к руководству по Google Web API [ http://www.google.com/apis/reference.html].

    Разработка простого поискового приложения

    Компонуя все, что было изучено выше, мы создадим простое поисковое приложение, которое будет использовать Web-сервис Google для собственно поиска и отобрать результаты в требуем нам формате.

    • Кликнем правой клавишей на project (проект), кликнем по 'New' ('Новый') и выберем новый JSP-файл (Web tier -> Страницы Сервера Явы-> JSP Page).

      Введем 'search.jsp' как название JSP-файла и кликнем 'OK'. Этим будут сгенерирован простой jsp-файл.

    • Отредактируем JSP-файл, заменив все его содержание на код, приведенный в Листинг_3.
    • Кликнем правой клавишей JSP и выберем 'Run search.jsp' ('запуск search.jsp'), чтобы запустить JSP-страницу.

      Тем самым мы развернули JSP-файл в встроенном в Oracle JDeveloper 10g сервере Oracle Containers for J2EE (OC4J) и активизировали JSP в web-браузере по умолчанию. Когда страница загрузилась, можно ввести ключевые слова (например: "Web service sample code" - "типовой код Web-сервиса") в текстовом поле и кликнуть 'Search' ('Поиск'), чтобы активизировать Web- сервис.

      Результаты поиска отобразятся на вашем браузере. Воспользуйтесь кнопкой браузера 'Back' ('назад'), чтобы выйти на страницу поиска и попробовать другие ключевые слова.

      Вы можете создать J2EE Web Module профиль разработки и по одному единственному клику предоставить это приложение любому функционирующему экземпляру Oracle Application Server, BEA WebLogic, JBoss или Tomcat.

      Заключение

      В этой статье показано, как Web-сервисы могут быть встроены в приложения и использованы в качестве или источников данных (data sources), или процессоров данных (data processors). Мощные, находящиеся под рукой функциональные возможности Oracle JDeveloper 10g позволяют быстро разрабатывать Web-сервисные приложения, поскольку избавляют разработчиков от учета сложностей лежащей в основе инфраструктуры Web-сервисов.


      Elangovan Balusamy (elangovan.balusamy@oracle.com) – член Oracle Technology Network.

      Разработка Web-сервисов: Почему Oracle JDeveloper 10g?
      • Oracle JDeveloper10g поддерживает полный жизненный цикл разработки Web-сервисов, включая UML-моделирование, публикацию, развертывание, настройку, локальную и удаленную отладку, обнаружение и мониторинг SOAP-сообщений.
      • Наглядные визарды Oracle JDeveloper могут автоматически публиковать хранимые процедуры базы данных на EJB, Java-классах, Java и PL/SQL в виде Web-сервисов, а также задействовать .NET Web-сервисы от Microsoft. Web-сервисы, развернутые на Oracle Application Server, могут активизировать .NET Web-сервисы и сами быть активизированы из них. Используя TCP Packet Monitor, разработчики могут легко выполнять отладку SOAP-сообщений.
      • Oracle JDeveloper 10g поддерживает последние стандарты J2EE и Web-сервисов и предоставляет удобные в работе визуальные средства для разработки JavaServer Pages, сервлетов (servlets), Enterprise Java Beans и Web-сервисов. Также JDeveloper теперь поддерживает генерацию таких J2EE конструктивных моделей, как Data Transfer Object и Session Facade.
      • Поддержка Web-сервисов, разработанных на Jdeveloper от Oracle, улучшена за счет применения согласованного тестирования по WS-I Basic Profile, UML-моделирования и визуализации Web-сервисов, создания Web-сервисов из Java-классов за один клик и создания сложных Web-сервисов на PL/SQL.

      Новый административный инструментарий для встроенного J2EE-сервера помогает управлять ресурсами данных, JAZN (Java AuthoriZatioN) и другими установками J2EE-приложений. Последний релиз позволяет разработчикам развертывать J2EE-приложения при помощи одного единственого клика к Oracle Application Server, BEA WebLogic, Jboss или Tomcat.

      Таблица 1

      Имя файла Описание
      ResultElement.java Инкапсулирует результат поиска. Отображает одиночную строку, соответствующую результату поиска
      GoogleSearchResult.java Инкапсулирует все результаты поиска для поиска. Внутренне содержит список ResultElement
      DirectoryCategory.java Инкапсулирует категорию ODP (Open Directory Project - Открытая Директория Проекта)
      GoogleSearchServiceStub.java Stub/Web -класс клиентского web-сервиса. Этот класс руководит SOAP-вызовами, активизирует web-сервис и обрабатывает ответ

    E-mail this page