Миграция с Apache Tomcat Version 6.0.x на WebSphere Application Server Community Edition V2.1

В статье описывается развертывание «пробного» приложения на сервере Tomcat 6.0 с последующей миграцией и развертыванием программного кода на сервере WebSphere® Application Server Community Edition V2.1. На примере указанного приложения иллюстрируются ряд примечательных различий между этими двумя реализациями.

Введение

Загрузите Community Edition V2.1 прямо сейчас!
Продукт IBM WebSphere Application Server Community Edition V2.1 доступен для бесплатного развертывания и использования. Загрузите его прямо сейчас (EN) и приступайте к работе.

Продукт IBM WebSphere Application Server Community Edition (далее – Community Edition) – это сертифицированный на соответствие Java™ Enterprise Edition 5 (Java EE5) сервер приложений, в состав которого интегрированы компоненты для работы с данными (Apache Derby), сервисами обмена сообщениями (Active MQ), Web-сервисами (Apache Axis) и т.д.

Этот продукт создан с использованием архитектуры Geronimo Beans (GBean) на базе продукта Apache Geronimo. Небольшой объем, простота использования, бесплатное распространение и опциональная поддержка мирового класса от IBM делают этот продукт идеальным решением для организаций малого и среднего размера.

Apache Tomcat – это созданный организацией Apache Software Foundation Web-контейнер, в котором реализованы API-интерфейсы Java Servlet и Java Server Pages. В продукте Tomcat Version 6.0.x реализованы API-интерфейсы Java Servlet 2.5 и Java Server Pages 2.1.

Хотя в этой статье описывается миграция пробного приложения с Tomcat 6.0.x на Community Edition 2.1, миграция с версии Tomcat 5.x будет очень похожа. Tomcat Version 5.x реализует API-интерфейсы версий Java Servlet 2.4 и Java Server Pages 2.0, а выпуск Community Edition 2.1 обратно совместим с этими версиями. Тем не менее, определенные различия в задании конфигураций могут иметь место.

В статье поэтапно описывается процесс миграции на Community Edition приложения, разработанного в среде Apache Tomcat. Для разработки приложений на Tomcat и Community Edition применялась интегрированная среда разработки Eclipse. Статья состоит из следующих разделов.


Анализ архитектур – сходство и различия

Рисунок 1. Архитектура Geronimo (Community Edition)
Рисунок 1. Архитектура Geronimo (Community Edition)

Как показано на рис. 1, решение Community Edition основано на компонентной архитектуре. В его состав входят лучшие в своем классе продукты с открытым исходным кодом, созданные различными opensource-сообществами. Apache Tomcat является Web-контейнером по умолчанию для Community Edition, поэтому вы легко сможете осуществить миграцию разработанного в среде Apache приложения в среду Community Edition.

В среде Community Edition вы будете работать с тем же самым сервером Tomcat, с которым уже хорошо знакомы по работе с его автономной версией. В результате вам не придется переупаковывать свое приложение для Community Edition. Тем не менее, существуют некоторые различия, которые необходимо учитывать при миграции вашего приложения с Tomcat на Community Edition. Эти различия обусловлены следующей причиной. Поскольку Tomcat развернут в среде Community Edition как сервис, ему доступны возможности сертифицированного на соответствие Java EE5 сервера приложений, а не только контейнера сервлетов. Tomcat интегрирован с другими развернутыми в Community Edition контейнерными сервисами, такими как:

  • JMS (Apache ActiveMQ)
  • База данных (Apache Derby)
  • EJB (Apache OpenEJB)
  • Web-сервисы (Apache Axis)
  • Persistence (Apache OpenJPA)
  • Регистрация
  • Безопасность

Чтобы преодолеть большинство проблем миграции, вы должны выяснить, как каждый из этих сервисов отображается в среде Tomcat и как он применяется в среде Community Edition. Базовая архитектура сервера Tomcat не меняется, однако в среде Community Edition он определен как Gbean-компонент. Эта реализация позволит легко интегрировать последующие версии Tomcat в будущие версии Community Edition.

В следующей таблице показаны основные различия между сервером Tomcat, работающим в автономном режиме, и сервером Tomcat, интегрированным в Community Edition:

Таблица 1. Сравнение функциональных возможностей Tomcat V6.0.x и Community Edition V2.1
Функциональная возможностьTomcatCommunity Edition
Java-сервлеты Реализует API-интерфейс Servlet 2.5 Реализует API-интерфейс Servlet 2.5
Java Server Pages Реализует API-интерфейс JSP 2.1 Реализует API-интерфейс JSP 2.1
JNDI Ручное конфигурирование, как правило с использованием файла server.xml JNDI имеет доступ к объектным ссылкам, управляемым ядром Geronimo
JMS Ручное конфигурирование с использованием файла context.xml Для создания JMS-ресурсов может быть использован графический Web-интерфейс
JDBC-источник данных Ручное конфигурирование с использованием файла context.xml Для создания JDBC-источников данных может быть использован графический Web-интерфейс
Web-сервис (Apache Axis) Данная функциональность реализуется посредством развертывания Axis.war Продукт Axis заранее интегрирован в Community Edition.
Области безопасности Конфигурирование с использованием файла server.xml или context.xml Поддерживает управляемые контейнером области, которые доступны для авторизации всех компонентов. Поддерживается задание областей для отдельных компонентов.
Несколько коннекторов Позволяет нескольким обработчикам протоколов обращаться к одному и тому же механизму. Например, HTTP-коннектор может работать с SSL-коннектором на том же самом механизме. Консоль администратора может быть использована для конфигурирования различных коннекторов, включая HTTP-коннектор, SSL-коннектор и AJP13-коннектор (Apache Jserv Protocol), используемый для выравнивания нагрузки и кластеризации.
Виртуальные хосты Поддерживает хостинг различных Web-сайтов на одном сервере (одном IP-адресе). Эта опция конфигурируется с использованием файла server.xml Аналогичная возможность реализуется посредством конфигурирования файла config.xml
Дескриптор развертывания По умолчанию в качестве дескриптора развертывания Web-приложений на базе J2EE (WAR) используется файл web.xmlПо умолчанию в качестве дескриптора развертывания Web-приложений на базе J2EE (WAR) используется файл web.xml
План развертывания Отсутствует специализированный план развертывания для продуктов конкретных поставщиков Community Edition имеет дескриптор развертывания для Geronimo, предназначенный для конфигурирования специфических для Geronimo сервисов. Для Web-приложения используется план развертывания geronimo-web.xml

В решении Community Edition большая часть конфигурирования может быть выполнена с использованием одного из следующих планов развертывания: geronimo-web.xml, config.xml или config-substitution.properties. Кроме того, с помощью Web-консоли администратора вы можете легко добавлять такие ресурсы, как JMS-очереди, фабрики подключения и JDBC-источники данных. Эта консоль упрощает управление конфигурациями по сравнению с ручным конфигурированием в среде Tomcat с использованием файлов server.xml и context.xml.


О тренировочном приложении

Тренировочное приложение, которое мы будем переносить из среды Tomcat V6.0.x в среду Community Edition V2.1, представляет собой программу для универсального магазина, созданную с использованием следующих компонентов:

  • JSP-страницы
  • Сервлеты
  • JSP Standard Tag Library (JSTL)
  • JDBC-источник данных Apache Derby
  • JMS на базе Apache ActiveMQ
  • Web-сервис на базе Apache Axis

Данное приложение для аутентификации пользователей использует задаваемую по умолчанию в среде Tomcat область UserRealm, а Community Edition по умолчанию использует область geronimo-admin.

Тренировочное приложение, включенное в эту статью, состоит из единственного WAR-модуля со следующим контентом:

  • generalstore.jsp - Представляет пользователю каталог магазина. Отображает текущий курс акций IBM через внешний Web-сервис.
  • checkoutcart.jsp - Представляет пользователю корзину для покупок. Использует RDBMS через источник данных Derby для отображения рекламных сообщений. Отображает текущий курс акций IBM через внешний Web-сервис.
  • generalstore.css - Таблица стилей, используемая для форматирования HTML-элементов обеими JSP-страницами.
  • StockService.wsdl - Описывает местоположение Web-сервисов и методов, доступных в пределах сервисов. Этот WSDL-файл используется для генерации необходимых классов Java, а инструментарий Eclipse используется для генерации файлов этих классов.
  • StoreController.java - Основной контроллер для маршрутизации запросов в JSP-страницы. Также получает информацию о категории и товаре, после чего присоединяет эту информацию в качестве атрибутов для отображения JSP-страницами.
  • GeneralStore.java - Содержит методы, возвращающие необходимые для приложения данные. Также содержит функции, реализующие специализированную библиотеку тегов (см. generalstore-taglib.tld).
  • Category.java, Product.java, LineItem.java - JavaBean-компоненты, используемые для хранения значений при перемещении данных между моделью и представлением приложения.
  • CheckOut.java - Завершает заказ и отсылает его менеджеру по управлению запасами.

Настройка Tomcat для развертывания приложения

По умолчанию сервер Tomcat слушает запросы на порту 8080.

Изменение этого порта осуществляется в файле <Tomcat_Home>/conf/server.xml. На листинге 1 показано, как изменить конфигурацию порта по умолчанию.

Листинг 1. Конфигурация коннектора Tomcat в файле server.xml
<Service name="Catalina">
     ...
     ...
<Connector port="8080" 
 protocol="HTTP/1.1" 
 connectionTimeout="20000"
 redirectPort="8443" />

Измените значение прежнее порта на любое нужное значение. Не забудьте остановить сервер до внесения каких-либо конфигурационных изменений в файл server.xml. Перезапустите сервер, чтобы измененные параметры вступили в силу.

Конфигурирование области аутентификации Tomcat

Область в Tomcat хранит информацию о пользователе, группе и пароле. По умолчанию в Tomcat настроена область UserDatabaseRealm, позволяющая производить аутентификацию пользователя перед предоставлением ему доступа к магазину. Эта область также настроена в файле server.xml. На листинге 2 конфигурация этой области аутентификации в сегменте кода server.xml показана жирным шрифтом.

Листинг 2. Конфигурация области UserDatabaseRealm в файле server.xml
<Server port="8005" shutdown="SHUTDOWN">
     ...
    <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  ... 
  <Service name="Catalina">
  
    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />

      ...

      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>

Показанная выше конфигурация настраивает область UserDatabaseRealm на использование файла conf/tomcat-users.xml для хранения информации о пользователе, пароле и роли. Поскольку эта область настраивается на уровне <Engine>, она доступна всем хост-системам, выполняющимся в экземпляре компонента Tomcat <Engine>.

Для исполнения нашего приложение вам не нужно вносить какие-либо изменения в файл conf/server.xml, поскольку мы собираемся использовать конфигурацию по умолчанию. Однако вы должны внести определенные изменения в файл conf/tomcat-users.xml file, в котором область UserDatabaseRealm сохраняет всю информацию о пользователе. Выполните изменения в файле tomcat-users.xml, выделенные на листинге 3 жирным шрифтом.

Листинг 3. Добавление ролей admin и manager для пользователя Tomcat в файле tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat,manager,admin"/>
  <user username="role1" password="tomcat" roles="role1"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
</tomcat-users>

В этом коде пользователю tomcat (с паролем tomcat) назначаются роли групп manager и admin.

В файле приложения web.xml контроллер магазина защищен; права доступа предоставляются только пользователям с ролью admin. В листинге 4 жирным шрифтом выделен код файла web.xml(находящегося в каталоге dd дистрибутива кода), который защищает приложение.

Листинг 4. Дескриптор развертывания web.xml с защитой доступа к приложению посредством аутентификации
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns="http://java.sun.com/xml/ns/javaee" 
  xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
  id="WebApp_ID" version="2.5">
  <display-name>ShoppingStore</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>GeneralStore</servlet-name>
    <servlet-class>com.ibm.wasce.store.StoreController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>GeneralStore</servlet-name>
    <url-pattern>/store.cgi</url-pattern>
  </servlet-mapping>
  <resource-ref>
    <description>Derby DB connection</description>
    <res-ref-name>jdbc/storeDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>
  <security-constraint>
    <display-name>General Store Security Constraint</display-name>
    <web-resource-collection>
      <web-resource-name>Entire store</web-resource-name>
      <url-pattern>*.cgi</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>admin</role-name>
    </auth-constraint>
  </security-constraint>
  <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Shopping Realm</realm-name>
  </login-config>
  <security-role>
    <role-name>admin</role-name>
  </security-role>
  <servlet>
    <description></description>
    <display-name>CheckOut</display-name>
    <servlet-name>CheckOut</servlet-name>
    <servlet-class>com.ibm.wasce.store.CheckOut</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CheckOut</servlet-name>
    <url-pattern>/CheckOut</url-pattern>
  </servlet-mapping>
</web-app>

Элементы <security-constraint> и <security-role> в приведенном выше коде – стандартные элементы конфигурации безопасности J2EE – являются переносимыми между контейнерами. Другими словами, этот же файл web.xml будет работать позднее в среде Community Edition.

Настройка сетевого сервера Derby

Сначала убедитесь в том, что, что у вас установлен сервер Apache Derby 10.3.1. Затем выполните следующие шаги:

  1. Настройте переменную среды DERBY_INSTALL на свой каталог установки Derby и включите следующие элементы в свою переменную среды CLASSPATH:
    • lib/derby.jar
    • lib/derbytools.jar
    • lib/derbynet.jar
    • lib/derbyclient.jar
  2. Запустите сервер Derby при помощи следующей команды:
    	java org.apache.derby.drda.NetworkServerControl start

    Сервер Derby запустится и начнет прослушивать порт по умолчанию 1527.

  3. Создайте базу данных с именем generalstore, которая содержит только одну таблицу с именем promotions. Для создания и заполнения этой базы данных значениями используется скрипт createdb1.sql.

    Для выполнения SQL-скрипта воспользуйтесь командой ij:
    java org.apache.derby.tools.ij createdb1.sql

Скрипт createdb1.sql содержит SQL-команды, показанные на листинге 5.

Листинг 5. Скрипт createdb1.sql script: Создает таблицу базы данных и заполняет ее данными
connect 'jdbc:derby://localhost/generalstore;create=true';
drop table promotion;
create table promotion
  (id char (5) not null,
   message char(40) not null,
   primary key(id));
insert into promotion values ('1', 'Thank your for your order.');
insert into promotion values ('2', 'Have a nice day!');
exit;

Если вы видите сообщение ERROR 08001: No suitable driver, это значит, что необходимая библиотека lib/derbyclient.jar не найдена в вашей переменной среды CLASSPATH.

Настройка JMS-брокера Apache ActiveMQ

Убедитесь в том, что у вас установлен компонент apache-activemq-4.1.1, после чего выполните следующие шаги:

  1. Включите следующие элементы в свою переменную среды CLASSPATH:
    • lib/activeio-core-3.0.0-incubator.jar
    • lib/commons-logging-1.1.jar
    • <ActiveMQ_HOME>/apache-activemq-4.1.1.jar
  2. 2. Запустите брокер ActiveMQ посредством исполнения скрипта activemq.bat. Вы сможете найти этот скрипт в каталоге <ActiveMQ_HOME>/bin.

Настройка Apache Axis

Включите следующие элементы в свою переменную среды CLASSPATH. Вы сможете автоматически загрузить перечисленные ниже JAR-файлы из среды Eclipse. Дополнительная информация приведена в разделе Удаление ненужных сервисов из WAR-файла Community Edition.

  • wsdl4j-1.5.1.jar
  • saaj.jar
  • jaxrpc.jar
  • axis.jar

Ссылка на JNDI-ресурс Tomcat и JDBC-коннектор

Страница checkoutcart.jsp использует JSTL-теги поддержки SQL для обращения к рекламной базе данных и выводит на печать рекламные сообщения. На листинге 6 показан фрагмент кода, который обращается к RDBMS.

Листинг 6. JSP-код в файле checkoutcart.jsp, обращающийся к серверу базы данных
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="storetags" uri="/GeneralStoreTagLibrary" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"  %>
 ...
<sql:query var="rs" dataSource="jdbc/storeDB">
   select * from promotion
</sql:query>
 ...
<tr>
<td colspan="5">
<c:forEach var="row" items="${rs.rows}">
   ${row.message}<br/>
</c:forEach>
</td>
</tr>

JSTL-тег <sql:query> будет искать, через JNDI, источник данных с именем jdbc/storeDB. Ссылка на это имя определяется стандартным для J2EE способом в дескрипторе развертывания приложения - web.xml. Эта стандартная конфигурация будет работать и с Tomcat, и с Community Edition. Данная конфигурация показана на листинге 7.

Листинг 7. Элемент в web.xml, специфицирующий ссылку на JNDI-источник данных
<resource-ref>
      <description>Derby DB connection</description>
      <res-ref-name>jdbc/storeDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
</resource-ref>

Теперь вы должны настроить эту ссылку на соответствие реальному JDBC-драйверу и соединению с RDBMS зависящим от контейнера способом – т.е. по-разному для Tomcat и для Community Edition. В случае Tomcat эта ссылка настраивается в файле conf/context.xml (который находится в каталоге установки Tomcat) (см. листинг 8).

Листинг 8. Специфический для Tomcat дескриптор context.xml, связывающий JNDI-ресурс с JDBC-коннектором Derby
<Context>
     ...
     ...
<Resource name="jdbc/storeDB" auth="Container" type="javax.sql.DataSource"
  maxActive="100" maxIdle="30" maxWait="10000"
  driverClassName="org.apache.derby.jdbc.ClientDriver"
  user="APP" password="APP" 
  url="jdbc:derby://localhost/generalstore"/>
     ...
     ...
</Context>

Конфигурирование Tomcat для брокера ActiveMQ

В случае успешного размещения заказа сервлет CheckOut.java.java отображает соответствующее сообщение. На листинге 9 показан фрагмент кода сервлета, который ищет фабрику подключения и очередь.

Листинг 9. Фрагмент кода сервлета
Context initContext = new InitialContext();
Context jndiContext=(Context) initContext.lookup("java:comp/env");
connectionFactory = (ConnectionFactory)  jndiContext.lookup("jms/ConnectionFactory");
queue = (Queue) jndiContext.lookup("jms/aQueue");

Ссылки имени на фабрику подключения и на очередь задаются в файле web.xml, как показано на листинге 10.

Листинг 10. JMS-элементы файла web.xml, специфицирующие фабрику подключения и очередь
<resource-ref>
        <description>jms broker</description>
        <res-ref-name>jms/ConnectionFactory</res-ref-name>
        <res-type>javax.jms.ConnectionFactory</res-type>
        <res-auth>Container</res-auth>
  </resource-ref>
	<message-destination-ref>
		<message-destination-ref-name>jms/aQueue</message-destination-ref-name>
		<message-destination-type>javax.jms.Queue</message-destination-type>
		<message-destination-usage>ConsumesProduces</message-destination-usage>
		<message-destination-link>aQueue</message-destination-link>
	</message-destination-ref>
	<message-destination>
		<message-destination-name>aQueue</message-destination-name>
	</message-destination>

Теперь вы должны настроить Tomcat для фабрики подключения ActiveMQ и для очереди пункта назначения ActiveMQ, также специфическим для конкретного контейнера способом. В случае Tomcat конфигурирование осуществляется в файле conf/context.xml (который находится в каталоге установки Tomcat). На листинге 11 показаны параметры фабрики подключения и очереди пункта назначения.

Листинг 11. Специфический для Tomcat дескриптор context.xml для конфигурации брокера ActiveMQ
<Context>
     ...
     ...
<Resource
        name="jms/ConnectionFactory"
        auth="Container"
        type="org.apache.activemq.ActiveMQConnectionFactory"
        description="JMS Connection Factory"
        factory="org.apache.activemq.jndi.JNDIReferenceFactory"
        brokerURL="tcp://localhost:61616"
        brokerName="localhost"
        persistent="false"
        useEmbeddedBroker="false"/>

     <Resource name="jms/aQueue"
        auth="Container"
        type="org.apache.activemq.command.ActiveMQQueue"
        factory="org.apache.activemq.jndi.JNDIReferenceFactory"
        physicalName="MY.TEST.QUEUE"/>
     ...
     ...
</Context>

Генерация класса Web-сервисов с использованием StockService.wsdl

В этом разделе мы осуществим генерацию класса Web-сервисов.

  1. На листинге 12 показан WSDL-файл, необходимый для генерации артефактов Web-сервисов.

    Листинг 12. Файл StockService.wsdl для генерации артефактов Web-сервисов

    <wsdl:definitions xmlns:http=http://schemas.xmlsoap.org/wsdl/http/
       xmlns:soap=http://schemas.xmlsoap.org/wsdl/soap/
       xmlns:s=http://www.w3.org/2001/XMLSchema
       xmlns:soapenc=http://schemas.xmlsoap.org/soap/encoding/
       xmlns:tns=http://www.webserviceX.NET/
       xmlns:tm=http://microsoft.com/wsdl/mime/textMatching/
       xmlns:mime=http://schemas.xmlsoap.org/wsdl/mime/
       targetNamespace=http://www.webserviceX.NET/
       xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    
      <wsdl:types>
       <s:schema elementFormDefault="qualified" 
              targetNamespace="http://www.webserviceX.NET/">
       <s:element name="GetQuote">
         <s:complexType>
          <s:sequence>
           <s:element minOccurs="0" maxOccurs="1" name="symbol"
            type="s:string"/>
          </s:sequence>
         </s:complexType>
        </s:element>
        <s:element name="GetQuoteResponse">
         <s:complexType>
          <s:sequence>
           <s:element minOccurs="0" maxOccurs="1" name="GetQuoteResult" type="s:string"/>
          </s:sequence>
         </s:complexType>
        </s:element>
        <s:element name="string" nillable="true" type="s:string"/>
       </s:schema>
      </wsdl:types>
      <wsdl:message name="GetQuoteSoapIn">
       <wsdl:part name="parameters" element="tns:GetQuote"/>
      </wsdl:message>
      <wsdl:message name="GetQuoteSoapOut">
       <wsdl:part name="parameters" element="tns:GetQuoteResponse"/>
      </wsdl:message>
      <wsdl:message name="GetQuoteHttpGetIn">
       <wsdl:part name="symbol" type="s:string"/>
      </wsdl:message>
      <wsdl:message name="GetQuoteHttpGetOut">
       <wsdl:part name="Body" element="tns:string"/>
      </wsdl:message>
      <wsdl:message name="GetQuoteHttpPostIn">
       <wsdl:part name="symbol" type="s:string"/>
      </wsdl:message>
      <wsdl:message name="GetQuoteHttpPostOut">
       <wsdl:part name="Body" element="tns:string"/>
     </wsdl:message>
    
     <wsdl:portType name="StockQuoteSoap">
      <wsdl:operation name="GetQuote">
       <wsdl:input message="tns:GetQuoteSoapIn"/>
       <wsdl:output message="tns:GetQuoteSoapOut"/>
      </wsdl:operation>
     </wsdl:portType>
    
     <wsdl:portType name="StockQuoteHttpGet">
      <wsdl:operation name="GetQuote">
       <wsdl:input message="tns:GetQuoteHttpGetIn"/>
       <wsdl:output message="tns:GetQuoteHttpGetOut"/>
      </wsdl:operation>
     </wsdl:portType>
    
     <wsdl:portType name="StockQuoteHttpPost">
      <wsdl:operation name="GetQuote">
      <wsdl:input message="tns:GetQuoteHttpPostIn"/>
       <wsdl:output message="tns:GetQuoteHttpPostOut"/>
      </wsdl:operation>
     </wsdl:portType>
    
     <wsdl:binding name="StockQuoteSoap" type="tns:StockQuoteSoap">
      <soap:binding transport=http://schemas.xmlsoap.org/soap/http
       style="document"/>
      <wsdl:operation name="GetQuote">
       <soap:operation soapAction=http://www.webserviceX.NET/GetQuote
         style="document"/>
       <wsdl:input>
        <soap:body use="literal"/>
       </wsdl:input>
       <wsdl:output>
        <soap:body use="literal"/>
       </wsdl:output>
      </wsdl:operation>
     </wsdl:binding>
    
     <wsdl:binding name="StockQuoteHttpGet" type="tns:StockQuoteHttpGet">
      <http:binding verb="GET"/>
      <wsdl:operation name="GetQuote">
       <http:operation location="/GetQuote"/>
       <wsdl:input>
        <http:urlEncoded/>
       </wsdl:input>
       <wsdl:output>
        <mime:mimeXml part="Body"/>
       </wsdl:output>
      </wsdl:operation>
     </wsdl:binding>
    
     <wsdl:binding name="StockQuoteHttpPost" type="tns:StockQuoteHttpPost">
      <http:binding verb="POST"/>
      <wsdl:operation name="GetQuote">
       <http:operation location="/GetQuote"/>
       <wsdl:input>
        <mime:content part="NMTOKEN" type="application/x-www-form-urlencoded"/>
       </wsdl:input>
       <wsdl:output>
        <mime:mimeXml part="Body"/>
       </wsdl:output>
      </wsdl:operation>
     </wsdl:binding>
     <wsdl:service name="StockQuote">
      <wsdl:port name="StockQuoteSoap" binding="tns:StockQuoteSoap">
       <soap:address location="http://www.webservicex.net/stockquote.asmx"/>
      </wsdl:port>
      <wsdl:port name="StockQuoteHttpGet" binding="tns:StockQuoteHttpGet">
       <http:address location="http://www.webservicex.net/stockquote.asmx"/>
      </wsdl:port>
      <wsdl:port name="StockQuoteHttpPost" binding="tns:StockQuoteHttpPost">
       <http:address location="http://www.webservicex.net/stockquote.asmx"/>
      </wsdl:port>
     </wsdl:service>
    </wsdl:definitions>
  2. Нажмите правой кнопкой мыши на файле Stock Service.wsdl (показан на рис. 2) и последовательно выберите Web Services – Generate Client.
    Рисунок 2. Генерация артефактов Web-сервисов при помощи файла StockService.wsdl
    Рисунок 2. Генерация артефактов Web-сервисов при помощи файла StockService.wsdl
  3. На этом шаге будет произведена автоматическая генерация всех артефактов, необходимых для Web-сервисов. Будут сгенерированы следующие классы, как показано на рис. 3.
    • StockQuote.java
    • StockQuoteLocator.java
    • StockQuoteSoap.java
    • StockQuoteSoapProxy.java
    • StockQuoteSoapStub.java

    Кроме того, этот шаг загружает JAR-файлы, упомянутые в разделе V **add link** и перемещает эти файлы в файл WEB-INF/lib приложения.

    Рисунок 3. Сгенерированные классы Web-сервисов
    Рисунок 3. Сгенерированные классы Web-сервисов
  4. Для доступа к Web-сервисам в нашем приложении используется код из листинга 13, добавленный к файлам checkoutcart.jsp и generalstore.jsp.

    Листинг 13. Фрагмент кода для доступа к котировке акций IBM

    <%
    StockQuoteLocator sql = new StockQuoteLocator(); 
    StockQuoteSoap sqs = sql.getStockQuoteSoap();
    PrintWriter out1 =response.getWriter(); 
    String s1=sqs.getQuote("IBM");
     s1=s1.substring(46,51);
    %>

    В нашем случае мы передаем IBM как переменную, которая будет извлекать биржевые цены IBM из Web-сервиса Stock.


Развертывание приложения в среде Tomcat

В этом разделе мы развернем свое приложение в среде Tomcat. Выполните следующие шаги.

  1. Экспортируйте приложение из Eclipse в виде WAR-файла.
  2. Запустите Tomcat и откройте Web-консоль с помощью следующей команды:
    http://localhost:8080/manager/html
  3. Будет запрошена регистрационная информация (здесь используется область безопасности UserDatabaseRealm, которую мы настроили ранее). Поскольку необходима роль manager, введите tomcat в поля user name (имя пользователя) и password (пароль).
  4. Приложение manager отобразит все развернутые модули. Прокрутите список до конца, где должен находиться прямоугольник Deploy directory or WAR file located on server (Развернуть каталог или WAR-файл, размещенный на сервере). В поле Context path введите /Shopping, а в поле WAR or Directory URL введите абсолютный путь к файлу generalstore.war.
  5. Нажмите кнопку Deploy. Теперь вы должны увидеть, что приложение General Store работает с контекстом /Shopping. Рис. 4 показано приложение manager после успешного развертывания
    Рисунок 4. Успешное развертывание приложения на Tomcat
    Рисунок 4. Успешное развертывание приложения на Tomcat
  6. Для доступа к приложению введите следующий URL: http://localhost:8080/Shopping/store.cgi (EN).

Миграция приложения на Community Edition

В общем случае, для миграции приложения General Store на Community Edition необходимо выполнить следующие шаги.

  1. Настройте и замените область Tomcat UserDatabaseRealm на область аутентификации, управляемую контейнером Community Edition. Запустите Derby RDBMS, включенную в Community Edition, и используйте ее вместо автономной версии Derby.
  2. Создайте новый источник данных, управляемый Community Edition.
  3. Создайте необходимую таблицу базы данных и заполните ее данными.
  4. Настройте JNDI-ссылку для указания на источник данных Derby в Community Edition.
  5. Настройте фабрику подключения и очередь JMS-брокера ActiveMQ в Community Edition.

Элементы, которые не нужно менять во время миграции:

  • JNDI-ссылка на источник данных в web.xml.
  • Конфигурация безопасности в файле web.xml, защищающая приложение.

Эти элементы специально написаны таким образом, чтобы обеспечивалась их переносимость между J2EE-контейнерами

Изменение портов, используемых коннекторами Tomcat в Community Edition

Если вам нужно изменить порт, используемый коннекторами Tomcat в Community Edition, не ищите файл server.xml; такого файла нет в Community Edition. Вместо этого посмотрите на файл config-substitutions.properties в подкаталоге var/config каталога установки Community Edition. На листинге 14 показана конфигурация портов в Community Edition.

Листинг 14. Конфигурация портов Tomcat в Community Edition
AJPPort=8009
clusterNodeName=NODE
ORBPort=6882
MaxThreadPoolSize=500
ResourceBindingsNamePattern=
SMTPHost=localhost
ResourceBindingsQuery=?\#org.apache.geronimo.naming.ResourceSource
COSNamingPort=1050
webcontainer=TomcatWebContainer
OpenEJBPort=4201
ORBSSLPort=2001
PortOffset=0
ActiveMQStompPort=61613
JMXPort=9999
ORBHost=localhost
EndPointURI=http\://localhost\:8080
NamingPort=1099
DefaultWadiSweepInterval=36000
WebConnectorConTimeout=20000
HTTPSPort=8443
COSNamingHost=localhost
MinThreadPoolSize=200
ReplicaCount=2
ServerHostname=0.0.0.0
ActiveMQPort=61616
ORBSSLHost=localhost
SMTPPort=25
webcontainerName=tomcat6
ResourceBindingsNameInNamespace=jca\:
DefaultWadiNumPartitions=24
HTTPPort=8080
clusterName=CLUSTER_NAME
ClusterName=DEFAULT_CLUSTER
ResourceBindingsFormat={groupId}/{artifactId}/{j2eeType}/{name}
RemoteDeployHostname=localhost
TmId=71,84,77,73,68

Для изменения конфигурации портов по умолчанию вы можете модифицировать код на листинге 14 для Community Edition. Вы также можете убрать комментарии с переменной PortOffset и ввести выбранное вами значение. В результате настройки портов для всех сервисов в Community Edition сместятся на заданное вами значение PortOffset. Например, если вы зададите значение PortOffset=10, то ваш HTTP-порт будет иметь значение 8090, а консоль администратора будет иметь URL http://localhost:8090/console.

Не забудьте остановить автономную базу данных Derby, использовавшуюся приложением Tomcat, с помощью следующей команды:
java org.apache.derby.drda.NetworkServerControl stop

В качестве альтернативного варианта вы можете использовать Web-консоль для добавления коннектора Tomcat, либо изменить номер порта, используемый с коннектором. Для этого достаточно выбрать Server - Web Server в меню Web-консоли. После редактирования и сохранения измененного номера порта осуществите перезапуск для немедленного вступления в силу указанных изменений. Если вы используете этот номер порта для отображения консоли администратора, не забудьте изменить этот номер порта в адресной строке своего браузера для восстановления отображения консоли.

Конфигурирование области аутентификации, управляемой Community Edition

По умолчанию Community Edition управляет областью с именем geronimo-admin, которая использует файл свойств в каталоге var/security для хранения информации о пользователе, пароле и группе. Единственным пользователем, настроенным в этой области, является пользователь system с паролем manager, принадлежащий группе/роли admin. Вы можете добавлять пользователей и группы к этой области по умолчанию с помощью опции Security - Console Realm в меню Web-консоли.

Вы можете конфигурировать эту область безопасности в плане развертывания Community Edition geronimo-web.xml. Вам необходимо добавить код из листинга 15 в файл geronimo-web.xml.

Листинг 15. Конфигурация области безопасности в Community Edition
<security-realm-name>geronimo-admin</security-realm-name>
<sec:security>
 <sec:default-principal realm-name="geronimo-properties-realm">
  <sec:principalclass="org.apache.geronimo.
     security.realm.providers.GeronimoUserPrincipal" name="system"/>
  </sec:default-principal>
  <sec:role-mappings>
   <sec:role role-name="admin">
    <sec:realm realm-name="geronimo-admin">
      <sec:principalclass="org.apache.geronimo.
        security.realm.providers.GeronimoGroupPrincipal" name="admin"/>
      <sec:principalclass="org.apache.geronimo.
        security.realm.providers.GeronimoUserPrincipal" name="system"/>
     </sec:realm>
   </sec:role>
  </sec:role-mappings</sec:security>

Создание таблицы Promotion в базе данных Community Edition

Вы можете легко создать таблицу Promotion в Community Edition с помощью графической Web-консоли:

  1. Запустите сервер.
  2. Запустите консоль администратора с помощь команды: http://localhost:8080/console.
  3. Введите значения по умолчанию: user name (system) и password (manager).
  4. В навигационном меню консоли в секции Embedded DB выберите пункт DB Manager (см. рис. 5):
    Рисунок 5. Портлет DB в консоли администратора
    Рисунок 5. Портлет DB в консоли администратора
  5. На следующем экране (рис. 6) в окошке Create DB введите имя generalstore и нажмите кнопку Create.
    Рисунок 6. Создание базы данных generalstore
    Рисунок 6. Создание базы данных generalstore
  6. В ниспадающем меню Use DB выберите пункт generalstore и выполните скрипт, показанный на листинге 16 и на рис. 7.

    Листинг 16. Скрипт для создания таблицы promotion в Community Edition

    create table promotion	 
     (id char (5) not null, 
       message char(40) not null, primary key(id));
      insert into promotion values ('1', 'Thank your for your order.');
      insert into promotion values ('2', 'Have a nice day!');
    Рисунок 7. Создание таблицы promotion
    Рисунок 7. Создание таблицы promotion

Создание источника данных Derby в Community Edition

  1. Запустите консоль администратора с помощь команды: http://localhost:8080/console. Введите значения по умолчанию для user name и password (system и manager, соответственно).
  2. В навигационном меню консоли в секции Services выберите пункт Database Pools.
  3. В следующем окне (рис. 8) выберите пункт: Using Geronimo database pool wizard (Использовать мастера пулов баз данных Geronimo)
    Рисунок 8. Выбор мастера пулов баз данных Geronimo
    Рисунок 8. Выбор мастера пулов баз данных Geronimo
  4. В окошке Name of Database pool (Имя пула баз данных) введите имя SampleDS; в окошке Database Type (Тип базы данных) введите Derby Embedded XA (см. рис. 9). Нажмите Next.
    Рисунок 9. Создание пула баз данных в Community Edition
    Рисунок 9. Создание пула баз данных в Community Edition
  5. В окне мастера заполните форму как показано на рис. 10. Обратите внимание, что здесь в поле Password надо ввести APP. Нажмите Deploy.
    Рисунок 10. Создание пула баз данных в Community Edition
    Рисунок 10. Создание пула баз данных в Community Edition
  6. После успешного развертывания вы сможете видеть источник данных SampleDS , добавленный в список развернутых пулов в Community Edition (см. рис. 11).
    Рисунок 11. Источник данных SampleDS в списке развернутых пулов базы данных
    Рисунок 11. Источник данных SampleDS в списке развернутых пулов базы данных
  7. Вы сможете ассоциировать источник данных SampleDS с JNDI-ссылкой jdbc/storeDB в файле web.xml с помощью элементов <dependency> и <resource-ref> в плане развертывания geronimo-web.xml (см. листинг 17).

    Листинг 17. Фрагмент кода из плана развертывания geronimo-web.xml

    <sys:dependency>
      <sys:groupId>console.dbpool</sys:groupId>
      <sys:artifactId>SampleDS</sys:artifactId>  
    </sys:dependency>
    	
    <naming:resource-ref>
      <naming:ref-name>jdbc/storeDB</naming:ref-name>
      <naming:resource-link>SampleDS</naming:resource-link>
    </naming:resource-ref>

Создание фабрики подключения и очереди ActiveMQ

С помощью графической Web-консоли вы сможете легко создать управляемые Community Edition фабрику подключения и очередь.

  1. Запустите консоль администратора. В навигационном меню консоли в секции Services выберите пункт JMS Resources. На следующем экране выберите пункт For ActiveMQ.
  2. На следующем экране заполните форму, как показано на рис. 12. Нажмите на кнопку Next.
    Рисунок 12. Конфигурирование группы JMS-ресурсов
    Рисунок 12. Конфигурирование группы JMS-ресурсов
  3. На следующем экране (рис. 13) нажмите на кнопку Add Connection Factory
    Рисунок 13. Добавление Connection Factory
    Рисунок 13. Добавление Connection Factory
  4. В меню JMS Factory Type выберите пункт javax.jms.ConnectionFactory (рис. 14) и нажмите Next
    Рисунок 14. Добавление Connection Factory
    Рисунок 14. Добавление Connection Factory
    .
  5. Заполните форму как показано на рис. 15. Нажмите Next.
    Рисунок 15. Добавление Connection Factory
    Рисунок 15. Добавление Connection Factory
  6. На следующем экране (рис. 16) нажмите Add Destination для добавления очереди.
    Рисунок 16. Добавление пункта назначения (Destination)
    Рисунок 16. Добавление пункта назначения (Destination)
  7. В ниспадающем меню выберите пункт javax.jms.Queue (рис. 17). Нажмите Next.
    Рисунок 17. Установка типа адресата
    Рисунок 17. Установка типа адресата
  8. В поле Message Destination Name введите jms/aQueue, как показано на рис. 18. Нажмите Next.
    Рисунок 18. Добавление очереди (Queue)
    Рисунок 18. Добавление очереди (Queue)
  9. На следующем экране (рис. 19) нажмите кнопку Deploy Now, которая развертывает план ресурсов в среде Community Edition.
    Рисунок 19. Развертывание плана ресурса в среде Community Edition
    Рисунок 19. Развертывание плана ресурса в среде Community Edition
  10. В случае успешного развертывания вы сможете увидеть ресурс migration (миграция) среди доступных JMS-ресурсов (см. рис. 20).
    Рисунок 20. JMS-ресурс migration в списке доступных ресурсов
    Рисунок 20. JMS-ресурс migration в списке доступных ресурсов
  11. Вы можете ассоциировать фабрику подключения и очередь, которые уже присутствуют в файле web.xml, с помощью элементов <dependency> и <resource-ref> плана развертывания geronimo-web.xml, как показано на листинге 18.

    Листинг 18. Фрагмент кода из плана развертывания geronimo-web.xml

    	<sys:dependency>
    	 <sys:groupId>org.apache.geronimo.configs</sys:groupId>
    	 <sys:artifactId>activemq-ra</sys:artifactId>
    	 <sys:version>2.1.1</sys:version>
    	 <sys:type>car</sys:type>
    	</sys:dependency>
                     ...
                     ...
    	<naming:resource-ref> 
    	 <naming:ref-name>jms/ConnectionFactory</naming:ref-name>
    	 <naming:pattern>
    	   <naming:groupId>org.apache.geronimo.configs</naming:groupId>
    	   <naming:artifactId>activemq-ra</naming:artifactId>
    	   <naming:version>2.1.1</naming:version>
    	   <naming:name>DefaultActiveMQConnectionFactory</naming:name>
    	 </naming:pattern>
    	</naming:resource-ref>
    	
    	<naming:message-destination>
    	 <naming:message-destination-name>
    	  aQueue
    	 </naming:message-destination-name>
    	 <naming:admin-object-link>
    	  SendReceiveQueue
    	 </naming:admin-object-link>
    	</naming:message-destination>

Удаление ненужных сервисов из WAR-файла Community Edition

При сравнении размера «тренировочного» файла ShoppingStore_Tomcat.war (приблизительно 9 МБ) с размером аналогичного файла ShoppingStore_CommunityEdition.war (приблизительно 32 КБ) у вас может возникнуть вопрос о причинах столь больших различий. Причина заключается в следующем: все сервисы (Axis, JMS, общие блоки т.д.) и драйверы базы данных Derby, которые необходимо включать в каталог устанавливаемого на Tomcat приложения (WEB-INF\lib), уже интегрированы в Community Edition. Преимущество удаления этих jar-файлов состоит в том, что вам не придется интегрировать и поддерживать эти файлы.

В каталог WEB-INF\lib уже включены следующие jar-файлы из ShoppingStore_Tomcat.war:

  • activeio-core-3.0.0-incubator.jar
  • apache-activemq-4.1.1.jar
  • axis.jar
  • commons-discovery-0.2.jar
  • commons-logging.jar
  • derby.jar
  • derbyclient.jar
  • derbynet.jar
  • derbytools.jar
  • jaxrpc.jar
  • jstl.jar
  • saaj.jar
  • standard.jar
  • wsdl4j-1.5.1.jar

Эти jar-файлы также включены в каталог Community Edition <WASCE_HOME>/repository. Чтобы определить, существует ли определенный JAR-файл, ищите в каталоге /repository имя соответствующего компонента без номера версии (например, activeio-core) или без источника (например, activemq). Нужный jar-файл в /repository будет содержать номер версии (например, axis1-4.jar). JAR-файлы, которые не перечислены в /repository (например, специфические для конкретного приложения файлы), должны присутствовать в WEB-INF\l.

В данном примере миграции могут быть удалены все JAR-файлы в каталоге Tomcat WEB-INF\lib. Большинство Web-приложений помещает в каталог WEB-INF\lib некоторые специфические для приложения JAR-файлы, поэтому возможности по сокращению библиотеки будут зависеть от конкретной ситуации. JAR-файлы драйвера базы данных в общем случае должны быть установлены в \repository и использоваться совместно с приложениями. Консоль администратора помогает загружать и устанавливать файлы драйвера базы данных (т.е. Oracle или MySQL), которые не доступны в \repository (выберите Services - Database Pools - Using the Geronimo database pool wizard.)

Кроме того, в файле web.xml могут присутствовать параметры типа <servlet> , указывающие на JAR-файлы в каталоге WEB-INF\lib. Вам необходимо определить, не приведет ли удаление того или иного JAR-файла к необходимости изменений в файле web.xml.


Развертывание приложения в среде Community Edition

Для развертывания приложения запустите консоль администратора и выполните следующие шаги.

  1. В навигационном меню консоли в секции Applications выберите пункт Deploy New.
  2. Нажмите кнопку Browse рядом с текстовым полем Archive и отыщите файл Shoppingstore.war. После этого нажмите кнопку Install. В результате этого шага приложение будет развернуто в среде Community Edition (см. рис. 21).
    Рисунок 21. Развертывание приложения в среде Community Edition
    Рисунок 21. Развертывание приложения в среде Community Edition
  3. Запустите приложение с помощью команды: http://localhost:8080/Shopping/store.cgi. 4. При появлении приглашения для входа введите system в поле user name и manager в поле password.

Диагностика и устранение проблем миграции

Использованное в этой статье тренировочное приложение содержит примеры конфигурирования и планов развертывания для типичной миграции со среды Tomcat. В это приложение включено множество ресурсов различного типа в качестве примеров развертывания. Пункт меню Deploy New в консоли администратора предоставляет детальное сообщение об ошибках для WAR-файла, развертывание которого закончилось неудачей.

Инструмент развертывания на основе скриптов также выдает ошибку, если WAR-файл не может быть развернут. Если ошибки происходят в процессе тестирования приложения, просмотрите журнал Eclipse Server или файл var\log\server.log (для Linux – файл geronimo.out) на предмет наличия ошибок Java, которые моли иметь место при доступе к приложению.

При миграции самыми распространенными являются следующие проблемы.

  • Проблемы загрузчика классов Classloader
  • Проблемы конфигурирования ресурсов
  • Проблемы плана развертывания

Эти проблемы будут подробно рассмотрены в следующих разделах.

Проблемы загрузчика классов Classloader

По умолчанию в Community Edition применяется иерархия classloader, согласно которой сначала загружаются классы от родителя (то есть из \repository). Tomcat сначала загружает классы из приложения. Проблемы могут произойти в том случае, если приложение Tomcat использует более старые компоненты (напр. старую версию Axis) и структура API изменилась. В этом случае при развертывании WAR или в процессе исполнения могут иметь место ошибки загрузчика classloader.

Один из методов для корректировки проблем classloader состоит в добавлении параметров hidden-classes в план развертывания после параметра <moduleId>. Параметр hidden-classes специфицируют имена классов, которые не подлежат загрузке из родительских конфигураций. На листинге 19 показан пример файла geronimo-web.xml для нейтрализации проблем с загрузчиком Axis classloader. Для данного приложения используется файл axis.jar в каталоге WEB-INF\lib.

Листинг 19. Код hidden-classes для нейтрализации проблем с загрузчиком Axis classloader
</moduleId>
<hidden-classes>
    <filter>org.apache.axis2<filter>
</hidden-classes>

Другой метод нейтрализации проблем с загрузчиком classloader состоит в добавлении параметра inverse-classloading в план развертывания после параметра <moduleId>. Обратный порядок загрузки классов (Inverse classloading) заставляет Community Edition следовать иерархии classloader, согласно которой классы от родителя загружаются немедленно после классов приложения из каталога WEB-INF\lib. На листинге 20 показан пример файла geronimo-web.xml с параметрами inverse-classloading.

Листинг 20. Код inverse-classloading для нейтрализации проблем с загрузчиком classloader
</moduleId>
<inverse-classloading/>

Изменение структуры classloader должно обеспечить успешную миграцию приложения. Тем не менее, для работы с компонентами в Community Edition вам придется внести определенные изменения в код приложения, поскольку интеграция и поддержка компонентов – это ключевые преимущества использования Community Edition «поверх» Tomcat. Для получения дополнительной информации ознакомьтесь с документом: Managing the classpath (EN).

Проблемы конфигурирования ресурсов

Такие ресурсы, как соединения с базой данных и с областью безопасности, могут вызвать проблемы в процессе развертывания и исполнения. Поскольку Tomcat имеет иную структуру конфигурирования (с помощью файлов server.xml и context.xml), при миграции в Community Edition могут возникнуть конфигурационные проблемы. В большинстве случаев проблема состоит в некорректности параметра или доступа. Для баз данных в консоли администратора выберите Database Pools - Geronimo database pool wizard для тестирования соединения с базой данных. При нажатии на кнопку Deploy для пула базы данных производится тестирование соединения с указанной базой данных. В случае неудачного соединения происходит ошибка. Вы можете отредактировать пул для изменения параметров и произвести повторное тестирование – и так до тех пор, пока не добьетесь успешного соединения. Для областей безопасности в консоли администратора выберите Security Realms - Add new security realm для тестирования соединения с областью безопасности. Меню мастера Security Realm позволяет ввести имя пользователя/пароль для тестирования соединения. Если попытка входа окончится неудачей, вы можете отредактировать область безопасности и произвести повторное тестирование – и так до тех пор, пока не добьетесь успешного соединения.

Проблемы плана развертывания

План развертывания geronimo-web.xml требует, чтобы определенные параметры и форматы работали корректно. Используемое в данной статье приложение General Store имеет корректный план geronimo-web-xml, включенный в файл ShoppinStore_WASCE.war. Пакет эталонных приложений доступен на сайте загрузки Community Edition (EN). В этот пакет включены приложения различных типов с планом развертывания geronimo-web.xm. Вы можете использовать эти приложения в качестве основы для формулировки требований к своему плану развертывания.

Кроме того, попробуйте использовать меню Plan Creator в консоли администратора для создания плана развертывания geronimo-web.xml на основе WAR-файла Tomcat и соединений с ресурсами (т.е., база данных, JMS, область безопасности), ранее созданных с помощью консоли администратора. Эта достаточно простой метод для создания плана развертывания geronimo-web.xm. После развертывания WAR-файла вы можете определить план развертывания за пределами WAR-файла с помощью поля Plan. На рис. 21 показана информация по развертыванию WAR-файла и внешнего плана развертывания.


Заключение

Миграция приложений с Tomcat 6.0.x на Community Edition V2.1 является несложной процедурой, поскольку Tomcat 6.0.x фактически является интегрированной, неизмененной частью Community Edition. Тем не менее, поскольку все управление конфигурацией теперь выполняется в Community Edition, элементы конфигурации, обычно расположенные в файлах server.xml или context.xml Tomcat, теперь перенесены в следующие файлы:

  • config-substitution.properties: для быстрого изменения таких параметров, как номер порта для коннекторов.
  • geronimo-web.xml: специфический для Community Edition план развертывания для контекста приложения; может быть включен в каталог WEB-INF архива

Выполнив процедуру миграции Web-приложения с Tomcat 6.x на WebSphere Application Server Community Edition в пошаговом режиме, мы увидели, что основными моментами этой миграции являются следующие: переключение областей аутентификации, отображение JNDI-ссылок, настройка базы данных Derby, конфигурирование JDBC-коннекторов, фабрик JMS-ресурсов и JMS-очереди JMS.


Загрузка

ОписаниеИмяРазмер
Web-архив для TomcatShoppingStore_Tomcat.war8.9MB
Web-архив после миграции на Community EditionShoppingStore_CommunityEdition.war32KB

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

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=WebSphere, Open source
ArticleID=386815
ArticleTitle=Миграция с Apache Tomcat Version 6.0.x на WebSphere Application Server Community Edition V2.1
publish-date=05042009