
Июнь 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, чтобы сгенерировать клиента.
Затем надо выполнить следующие действия:
- Создание нового Рабочего пространства (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 вам не надо видеть все технологические действия, когда разрабатывается только одна конкретная область.

- Создание 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-результатов затем выводятся в протокольном окне.
Вот мы и закончили генерацию клиентской компоненты 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 JDeveloper10g поддерживает полный жизненный цикл разработки 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-сервис и обрабатывает ответ
|
|