Размещение web-служб в Apache Geronimo

Освоение процесса с помощью Amazon Web services

Думаете о сервере приложений для поддержки вашей работы в области разработки web-служб? Познакомьтесь с сервером приложений Apache Geronimo, одним из последних проектов от Apache Software Foundation. Специалист Java™ Кунал Миттал представит вам возможности web-служб и покажет, как писать и разрабатывать стандартный код web-служб J2EE в Geronimo. Вы узнаете, как использовать web-службы Amazon Web services с помощью Apache Axis, лежащую в основе реализации Протокола Доступа к Простым Объектам (Simple Object Access Protocol (SOAP)) и вы увидите, как использовать простой клиент на основе Страниц Сервера Java (JavaServer Pages (JSP)-based client) для доступа к web-службе.

Кунал Миттал, архитектор Portal/J2EE, консультант, внештатный писатель

Кунал Миттал – консультант, специализирующийся в технологиях Java, J2EE, технологиях web-служб. Он - соавтор и активный участник создания нескольких книг по этим темам. Кунал в настоящее время работает над портальным проектом для Sony Pictures Entertainment. Для получения более подробной информации посетите сайт автора.



28.06.2005

Geronimo поддерживает стандарты web-служб

Новый проект Apache Geronimo – мощный открытый сервер приложений J2EE, построенный на вершине стандартов J2EE 1.4. Он использует все открытые реализации и вскоре будет совместим с J2EE. Интересно, что Geronimo построен на совокупности кодов, собранных из многих других открытых проектов. Geronimo использует Apache Axis и Apache Scout (см. Ресурсы) для поддержки следующих стандартов web-служб:

  • Java Specification request (JSR) 109 (implementing Enterprise Web Services 1.1)(Запрос Спецификации Java 109 (реализация Web-служб Предприятия))
  • Java API for XML-based Remote Procedure Call (JAX-RPC) (Java API для Вызова Удаленных Процедур на базе XML)
  • SOAP with Attachments API for Java (SAAJ) 1.2 (SOAP с Прикреплениями API для Java 1.2)
  • Java API for XML Registries (JAXR) 1.0 (Java API для блока регистров XML)

Поддержка этих стандартов превращает Geronimo в жизнеспособную опцию при принятии решения о поддержке сервером приложений вашей работы по разработке web-служб. Если вы уже использовали открытые проекты, составляющие Geronimo, переход к Geronimo, как к вашему контейнеру размещений должен произойти естественно. Для еще большего облегчения процесса разработки и размещения приложений J2EE в Geronimo, имеются в распоряжении несколько дополнительных программных модулей Eclipse. Эти дополнительные программные модули – части Инструментальной Платформы Web Eclipse (Eclipse Web Tools Platform) (WTP) (запланирован запуск 1.0 в июле 2005). См. Ресурсы для ссылок на WTP и связанную с этим информацию. Используя в качестве примера web-службы Amazon (Amazon Web Services (AWS)), вы узнаете, как использовать web-службы с помощью Geronimo. Вы найдете инструкции по языку описания web-служб (Web Services Description Language (WSDL)) для AWS и использованию Apache Axis для построения кода. Вы увидите простой класс Java, который использует web-услугу и узнаете, как этот класс вызывается из файла JSP для отображения результатов web-службы. Наконец, вы преобразуете код, как файл WAR J2EE и разместите его в Geronimo.


Потребление web-служб Amazon

Для потребления AWS, вам нужно построить потребитель службы, используя Apache Axis, как реализацию SOAP. (Axis лежит в основе реализации SOAP, которую поддерживает Geronimo.) Если вы сделали это в прошлом и у вас есть код, можете это пропустить.

Во время написания этой статьи, Geronimo еще не является готовым сервером приложений, но он проходит процесс сертификации J2EE. Когда он будет выпущен, у него будет сертификат J2EE 1.4.

Требования к созданию кода AWS

Начните с установки вашей среды. Для создания кода потребителя AWS вам нужны следующие четыре вещи:

  • Комплект разработки программного обеспечения Java (Java software development kit (JDK)) 1.4.2 или позже. (См. Ресурсы для ссылок на web-сайт Java.)
  • Apache Axis 1.1 или позже. (См. Ресурсы для ссылки на Apache Axis.)
  • Язык Описания Web-Служб (The Web Services Description Language (WSDL)) для Web-службы. (См. Ресурсы для ссылки на загрузку WSDL.)
  • ID подписки на AWS из Amazon для того, чтобы вы могли использовать их Web-службы. (См. Ресурсы для ссылки на регистрацию для получения бесплатного ID.)

Установите вашу среду

Выполните следующие шаги, чтобы установить окружающую среду посредством загрузки элементов, перечисленных выше:

  • Установите JDK в директорию C:\jdk_142_05. Установите JAVA_HOME для этой директории.
  • Извлеките Apache Axis в C:\axis1-2, и определите AXIS_HOME как эту директорию.
  • Скопируйте файл WSDL в директорию AXIS_HOME.
  • Зарегистрируйтесь для получения ID подписки на AWS.

Теперь после того как у вас есть готовая окружающая среда, вы можете начать создание кода для использования web-службы.

Создание кода Java из WSDL

Сперва создайте код Java, который будет использовать web-службу из файла WSDL. Apache Axis поступает вместе с утилитой под названием WSDL2Java, которая выполняет для вас это задание. Для запуска этого инструмента убедитесь, что следующие файлы Java Archive (JAR) находятся в вашем пути классов. Пример программы setenv.bat показан в листинге 1.

Листинг 1. Setenv.bat
set AXIS_HOME=c:\axis-1-2
set CLASSPATH=.
set CLASSPATH=%AXIS_HOME%\lib\axis.jar;%CLASSPATH%
set CLASSPATH=%AXIS_HOME%\lib\commons-discovery.jar;%CLASSPATH%
set CLASSPATH=%AXIS_HOME%\lib\commons-logging.jar;%CLASSPATH%
set CLASSPATH=%AXIS_HOME%\lib\jaxrpc.jar;%CLASSPATH%
set CLASSPATH=%AXIS_HOME%\lib\saaj.jar;%CLASSPATH%
set CLASSPATH=%AXIS_HOME%\lib\log4j-1.2.8.jar;%CLASSPATH%
set CLASSPATH=%AXIS_HOME%\lib\wsdl4j.jar;%CLASSPATH%

Теперь из директории AXIS_HOME запустите следующую команду для создания кода Java:

java org.apache.axis.wsdl.WSDL2Java AWSECommerceService.wsdl

Процесс создания директории под названием com в директории AXIS_HOME займет несколько секунд. Теперь вы можете начать создание файла Web-архива (Web Archive (WAR) file), который вы со временем разместите на Geronimo. Создайте директорию под названием C:\amazon-client. Вы будете использовать эту директорию для хранения кода для WAR файла. В этой директории создайте директорию под названием WEB-INF и директорию под названием src. Скопируйте директорию com из вашей директории AXIS_HOME в C:\amazon-client\WEB-INF\src.

Этот код является основным для использования web-службы. Сейчас вам нет необходимости вдаваться в подробности этого кода.

Написание кода для использования web-службы

Далее, напишите клиента для web-службы. В этом примере вы будете создавать простой класс Java class, который вызывает соответствующие классы, которые были созданы с помощью WSDL2Java. (Инструменты такие, как Eclipse и IBM® Rational® Application Developer создают для вас суррогатную версию этого кода автоматически. Таким образом, я не буду тратить много времени на специфику того, как писать этот код.)

Для простоты, я создал класс, названный AmazonClient в той же самой структуре пакета, которая была создана с использованием WSDL2Java (com.amazon.xml.AWSECommerceServer). Код для этого класса показан в листинге 2.Этот класс показывает один метод под названием lookupISBN.Как следует из называния, этот метод вызывает AWS и возвращает информацию о книге, представленной по переданному номеру ISBN.

Листинг 2. AmazonClient.java
package com.amazon.xml.AWSECommerceServer;

import java.lang.*; 
import java.util.*;

public class  AmazonClient {

    public AmazonClient() {    }

    public Items[] lookupISBN(String isbn) throws Exception {

        try {

            System.out.println("Given ISBN is " + isbn);

            AWSECommerceServiceLocator locator = 
                    new AWSECommerceServiceLocator(); 

            AWSECommerceServicePortType type = 
                    locator.getAWSECommerceServicePort(); 

            String itemId[] = {isbn.trim()}; 
            ItemLookup lookup = new ItemLookup(); 
            lookup.setAssociateTag("MY ID");   // fill in your own 
            lookup.setSubscriptionId("MY ID"); // fill in your own 
            ItemLookupRequest lookupReq = new ItemLookupRequest(); 
            lookupReq.setMerchantId("All"); 
            lookupReq.setItemId(itemId); 
            lookupReq.setResponseGroup(new String[] 
            {"Medium", "OfferFull", "Variations", "Images"}); 
            ItemLookupRequest[] requests = lookup.getRequest(); 
            requests = new ItemLookupRequest[1]; 
            requests[0] = lookupReq; 
            lookup.setRequest(requests); 
            ItemLookupResponse response = 
                     type.itemLookup(lookup); 
            Items[] items = response.getItems(); 
            if (items != null && items.length > 0) { 
                System.out.println("Number of results "+ items.length); 
                return items; 
            } 
        } catch (javax.xml.rpc.ServiceException se) { 
            throw new Exception(se.getMessage()); 
        } 
        return new Items[0]; 
    } 
}

Вы должны зарегистрироваться в Amazon для получения ID подписки (см. выше Использование web-служб Amazon). После того, как вы получили ваш ID подписки, замените его в коде в листинге 2.

Теперь вы готовы скомпилировать этот код. После того, как вы запустили файл setenv.bat, вы легко сможете скомпилировать код, запустив javac *.java:. Вы получите несколько файлов класса в эту директорию. Для простоты упаковки, я копирую всю директорию src в новую директорию под названием WEB-INF/classes. Затем, из WEB-INF/classes, я удаляю все исходные файлы Java; из WEB-INF/src, я удаляю все файлы класса. Если вы используете интегрированную среду разработки (IDE), такую как Eclipse, много ручной работы выполняется за вас автоматически.

Теперь вы можете активизировать web-службу и увидеть результаты. Для этого воспользуйтесь файлом JSP.

Напишите файл JSP для просмотра результатов web-службы

В директории amazonclient создайте файл JSP под названием searchAmazon.jsp. Код показан в листинге 3.

В файле JSP, показанном в листинге 3, вы вызываете класс AmazonClient, который вы определили, и получаете массив элементарных объектов. Затем вы производите итерацию по этому массиву для отображения значений.

Вопрос здесь не в том, чтобы продемонстрировать хорошую практику кодировки J2EE, а скорее продемонстрировать, что весь код, который вы пишите, является стандартным кодом J2EE, который легко может быть размещен в IBM WebSphere®; платформах Apache Tomcat, Apache Geronimo, JBoss или BEA WebLogic.

Теперь у вас есть весь код, который нужен.

Заключительные шаги перед размещением кода

Последний шаг – установить дескрипторы размещения так, чтобы вы смогли разместить WAR файл в Geronimo. В директории WEB-INF создайте два простых дескриптора размещения XML. Первый – стандартный дескриптор размещения J2EE WAR, названный web.xml (см. листинг 4).

Листинг 4. web.xml
<?xml version="1.0"  encoding="ISO-8859-1" ?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_3.xsd"
    version="2.3">
 
  <display-name>Amazon Sample</display-name>
  <welcome-file-list>
      <welcome-file>t;searchAmazon.jsp</welcome-file>
  </welcome-file-list>
</web-app>

Geronimo требует дескриптор geronimo-jetty.xml. Код показан в листинге 5.

Листинг 5. дескриптор geronimo-jetty.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
xmlns="http://geronimo.apache.org/xml/ns/web/jetty"
xmlns:naming="http://geronimo.apache.org/xml/ns/naming"
configId="amazonclient"
parentId="amazonClient">
   <context-root>/amazonclient</context-root>
   <context-priority-classloader>true</context-priority-classloader>
</web-app>

Теперь вы можете сохранить этот файл как WAR файл, названный amazon.war. Для этого запустите следующую команду из директории amazonclient:

jar cf amazon.war

Теперь вы готовы разместить этот код в Geronimo.


Разместите код в Geronimo

Хотя вы построили стандартный файл J2EE WAR, вы легко можете разместить этот WAR файл в любом сервере приложений (или механизме сервлета), который вы выберите. Следующие разделы покажут вам, как разместить этот код в Geronimo.

Установите Geronimo

Начните с загрузки и инсталляции Geronimo. (См. в Ресурсах сайт загрузки.)Загрузите инсталлятор Geronimo 1.0 M3 Installer. Для запуска инсталлятора воспользуйтесь следующей командой:

java -jar geronimo-1.0-M3-installer.jar

Проделайте следующие шаги для инсталляции Geronimo в GERONIMO_HOME, который определен как C:\geronimo.

Запустите Geronimo

Для запуска сервера из директории GERONIMO_HOME directory, выполните следующую команду:

java -jar bin/server.jar

Разместите файл Amazon.war

У вас должны быть все файлы JAR, определенные в пакетном файле setenv в ваших путях классов. Скопируйте эти файлы из AXIS_HOME\lib в GERONIMO_HOME\lib. Многие из этих файлов JAR будут уже существовать в GERONIMO_HOME\lib. Не переписывайте поверх существующих файлов, даже если файлы, которые вы копируете являются последними версиями того же самого файла. Щелкните мышью по кнопке No, появится подсказка о замене существующих файлов.

Для размещения файла amazon.war на сервере приложений, скопируйте WAR файл в GERONIMO_HOME. Из этой директории запустите следующую команду:

java -jar bin/deployer.jar deploy amazon.war

Запустите searchAmazon.jsp

Последнее, что осталось сделать, это запустить файл JSP, который вы написали. Откройте окно браузера и наберите http://localhost:8080/amazon/searchAmazon.jsp в адресной строке.

Рисунок 1 показывает результат. Вы можете изменить файл JSP для того, чтобы включить поле формы, в которое вы можете ввести номер ISBN и получить результат.

Рисунок 1: Выполнение searchAmazon.jsp
searchAmazon.jsp

Теперь вы успешно разместили вашу первую web-службу в Geronimo.


Стандартные web-службы J2EE

Пример, приведенный в этой статье, простой, но он показал, что Geronimo поддерживает стандартные web-службы J2EE. В качестве упражнения в использовании web-служб вы можете попробовать другие опции, имеющиеся в AWS. Например, замените поиск по ISBN на поиск по названию или по имени автора. Затем из результатов работы web-служб выясните, как вывести URL, связывающий с Amazon.com, и показать изображение книги.

Другое интересное упражнение – использовать другие технологии J2EE вместе с Apache Axis для использования web-служб, а затем разместить их в Geronimo. Например, замените AmazonClient.java – Простой Старый Объект Java (Plain Old Java Object (POJO)) на не меняющий своего состояния компонент сессии Enterprise JavaBean (EJB), а затем разместите его в Geronimo.

В качестве примера вы можете взять любую web-службу из webMethods или web-служб Google. Если вы проделаете те же самые шаги, описанные в этой статье, вы сможете быстро разместить эти web-службы в Geronimo.


Заключение

Теперь, после того, как вы познакомились с Geronimo и возможностями его web-служб, вы будете готовы начать использовать сервер приложений Geronimo в вашей работе по разработке web-служб.

Ресурсы

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Технология Java, Open source, SOA и web-сервисы
ArticleID=146149
ArticleTitle=Размещение web-служб в Apache Geronimo
publish-date=06282005