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.
Для потребления AWS, вам нужно построить потребитель службы, используя Apache Axis, как реализацию SOAP. (Axis лежит в основе реализации SOAP, которую поддерживает Geronimo.) Если вы сделали это в прошлом и у вас есть код, можете это пропустить.
Требования к созданию кода 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, который будет использовать 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, который вы определили, и получаете массив элементарных объектов. Затем вы производите итерацию по этому массиву для отображения значений.
Теперь у вас есть весь код, который нужен.
Заключительные шаги перед размещением кода
Последний шаг – установить дескрипторы размещения так, чтобы вы смогли разместить 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.
Хотя вы построили стандартный файл J2EE WAR, вы легко можете разместить этот WAR файл в любом сервере приложений (или механизме сервлета), который вы выберите. Следующие разделы покажут вам, как разместить этот код в Geronimo.
Начните с загрузки и инсталляции Geronimo. (См. в Ресурсах сайт загрузки.)Загрузите инсталлятор Geronimo 1.0 M3 Installer. Для запуска инсталлятора воспользуйтесь следующей командой:
java -jar geronimo-1.0-M3-installer.jar |
Проделайте следующие шаги для инсталляции Geronimo в GERONIMO_HOME, который определен как C:\geronimo.
Для запуска сервера из директории GERONIMO_HOME directory, выполните следующую команду:
java -jar bin/server.jar |
У вас должны быть все файлы 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 |
Последнее, что осталось сделать, это запустить файл JSP, который вы написали. Откройте окно браузера и наберите http://localhost:8080/amazon/searchAmazon.jsp в адресной строке.
Рисунок 1 показывает результат. Вы можете изменить файл JSP для того, чтобы включить поле формы, в которое вы можете ввести номер ISBN и получить результат.
Рисунок 1: Выполнение searchAmazon.jsp
Теперь вы успешно разместили вашу первую web-службу в Geronimo.
Пример, приведенный в этой статье, простой, но он показал, что 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-служб.
- Оригинал статьи Deploy Web services in Apache Geronimo.
- Узнайте больше о проекте Web Tools Platform с сайта eclipse.org.
- Загрузите M4 milestone WTP с сайта eclipse.org.
-
Загрузите дополнительный программный модуль с сайта eclipse.org, который обеспечивает интеграцию WTP и Geronimo.
- Прочтите "Создание, размещение и отладка приложений Apache Geronimo" (developerWorks, май 2005), чтобы узнать, как использовать Eclipse для построения и размещения приложений Geronimo.
- Прочитайте двухсерийный цикл статей по Geronimo. Часть 1, "The J2EE 1.4 engine that could" - введение и концептуальный обзор Geronimo; Часть 2, "Tame this J2EE 1.4 bronco" охватывает конфигурацию, размщение, управление Geronimo и предоставляет примеры по размещению Web-приложений и EJBs (developerWorks, май 2005).
- Узнайте, как "Улучшить разработку приложений с помощью web-служб Amazon" (developerWorks, июнь 2005) в Части 1 этого обучающего пособия.
- Загрузите Java software development kit (JDK) 1.4.2 или позднее.
- Загрузите Apache Axis 1.1 или позднее.
- Загрузите Web Services Description Language (WSDL).
- Зарегистрируйтесь для получения бесплатного ID подписки AWS с сайта Amazon.
- Загрузите Gluecode Standard Edition, открытый сервер приложения на базе Apache Geronimo.
- Посетите официальный сайт Apache Geronimo
- Для получения большей информации или для загрузки Apache Axis, посетите сайт Apache Axis.
- Зайдите на сайт Apache Scout.
- Для получения большей информации о технологии JSP, посетите сайт Sun Microsystems JavaServer Pages Technology.
- Посетите раздел спецификаций J2EE v1.4 Documentation page для того, чтобы узнать больше о стандартах J2EE 1.4.
- Прочтите больше статей по web-службам в зоне developerWorks .
- Прочтите больше статей по программированию на Java в зоне Java технологий.
- Станьте членом сообщества developerWorks, приняв участие в блогах developerWorks.
- Посетите зону открытых исходных кодов developerWorks для получения развернутой информации, инструментов и обновлений проекта в помощь при работе с открытыми технологиями и использовании их при работе с продуктами IBM.
- Просмотрите все статьи Apache и бесплатные руководства Apache, доступные в области открытых проектов developerWorks.
- Найдите в разделе проекта Geronimo полный перечень бесплатных открытых ресурсов developerWorks.
- Обновите ваш следующий открытый проект разработки с помощью пробных программ от IBM, доступных для загрузки или на DVD.
Кунал Миттал – консультант, специализирующийся в технологиях Java, J2EE, технологиях web-служб. Он - соавтор и активный участник создания нескольких книг по этим темам. Кунал в настоящее время работает над портальным проектом для Sony Pictures Entertainment. Для получения более подробной информации посетите сайт автора.