IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  Технология Java | Open source  >

Geronimo! Часть 2: Укротите этого мустанга J2EE 1.4

Попрактикуйтесь в работе, развертывании, конфигурации и управлении

developerWorks
Опции документа

Опции документа, требующие включения JavaScript, не отображаются

Исходные тексты примера


Выскажите мнение об этой странице

Помогите нам улучшить содержание


Уровень сложности: простой

Синг Ли, Автор, Wrox Press

24.05.2005

Geronimo, проект сервера J2EE 1.4 от Apache Software Foundation, интегрирует в себе большой набор существующих служб с открытым исходным кодом для обеспечения совместимости с J2EE 1.4. В первой части этого цикла статей были рассмотрены причины появления Geronimo, цели его дизайна и архитектура, а также некоторые концепции и терминология. В этой завершающей части Синг Ли показывает практическое применение Geronimo. Используя последнюю версию Geronimo, вы протестируете и развернете Web-приложение, корпоративное приложение, Enterprise Java™Beans (EJB-компоненты) и другие компоненты.

Geronimo - сервер J2EE 1.4 с открытым исходным кодом от Apache Software Foundation, созданный в 2003 году. В первой части статьи приведено описание Geronimo с точки зрения дизайна системы, исследована его архитектура, рассмотрены некоторые ключевые структурные концепции и основная терминология. Сейчас продолжите экскурсию по Geronimo и детально исследуйте развертывание, настройку и возможности управления.

Вы узнаете, как этот разносторонний контейнер может помочь вам в вашей каждодневной работе по разработке J2EE-приложений. Начав с нетривиального примера корпоративного приложения, вы будете использовать программу развертывания Geronimo для развертывания и управления жизненным циклом многих стандартных J2EE-модулей. Вы протестируете работу в Geronimo Java Server Pages (JSP), сервлетов и библиотеки тегов в Web-архиве (WAR); сессионный EJB-компонент в корпоративном архиве (EAR); коннектор Java Database Connectivity (JDBC) в архиве ресурсов (RAR); компонент управления данными Container-Managed Persistence (CMP2), использующий язык запросов EJB Query Language (EJB-QL), пакетированный в EAR. Вы рассмотрите иерархию загрузчика классов (classloader) в Geronimo и увидите, как глубоко он зависит от конфигурации. И, наконец, вы изучите в действии поддержку управляемости в Geronimo. Используя консоль Java Management Extensions (JMX), вы посмотрите внутрь Geronimo и увидите развернутые вами Web-компоненты.

Выражаю искреннюю благодарность Гейру Магнуссону (Geir Magnusson, Jr.), Джереми Бойнзу (Jeremy Boynes), Дэвиду Дженксу (David Jencks) и Алану Д. Кабрера (Alan D. Cabrera) из команды Geronimo за ценные комментарии черновиков данной статьи.

Разделение луковицы Geronimo

Из обсуждения архитектуры в первой части вы знаете, что Geronimo работает как контейнер для других контейнеров с открытым исходным кодом (таких как Jetty, Tomcat и OpenEJB), обеспечивающих конфигурирование, управление, развертывание и другие важные службы.

На рисунке 1 изображена вложенность контейнера Geronimo, похожая на строение луковицы. Прежде всего, Geronimo сам является контейнером, охватывающим такие службы как Jetty или Tomcat. Jetty охватывает компоненты Web-приложения, которые вы развертываете (сервлеты, JSPs, библиотеки тегов и т.д.). Здесь важно отметить, что на каждой границе контейнера необходимы метаданные или информация дескриптора развертывания (XML-файл), как показано на рисунке 1:


Рисунок 1. Слой луковицы Geronimo, показывающий вложенность и необходимые метаданные

На рисунке 1 план развертывания j2ee-server-plan.xml указывает Geronimo, как развертывать и конфигурировать службу Jetty. На следующем слое дескриптор развертывания jetty-web.xml указывает службе Jetty, содержащейся внутри Geronimo, как развернуть и сконфигурировать компоненты вашего Web-приложения.

Естественно, стандартные независимые от контейнера дескрипторы развертывания, описанные в спецификации J2EE 1.4, тоже необходимы. К ним относятся web.xml для Web-приложений, ejb-ear.xml для EJB-архивов и application.xml для EAR-файлов.

В этой статье я сконцентрируюсь на конфигурировании и развертывании только готовых к развертыванию модулей J2EE. Конфигурирование и развертывание системных компонентов, таких как Jetty и Tomcat, выходит за рамки рассмотрения данной статьи, хотя механизм аналогичен.



В начало


Развертывание и управление жизненным циклом

В таблице 1 приводятся детали различных архивов, которые могут быть развернуты, их дескрипторы развертывания и связанные с ними планы развертывания в Geronimo.

Таблица 1. Готовые к развертыванию архивы с дескрипторами развертывания и планами развертывания в Geronimo
Разворачиваемый архивСтандартные дескрипторы развертывания в J2EE-спецификацииСпецифический для Geronimo план развертывания
Архивный файл Web-приложения (WAR)web.xml в каталоге WEB-INFgeronimo-jetty.xml
JAR, содержащий EJB-компонентыejb-jar.xml в каталоге META-INFopenejb-jar.xml
Корпоративный архивный файл Web-приложения (EAR)application.xml, с web.xml внутри любого включенного WAR, и ejb-jar.xml внутри любого включенного EJB JARgeronimo-application.xml
Архив ресурсов коннектора J2EE (RAR)ra.xmlgeronimo-ra.xml
Архив клиентского J2EE-приложения (JAR)application-client.xmlgeronimo-application-client.xml
Если сомневаетесь, просто разверните его!
Для предоставления наиболее приятных условий пользователям сервера Geronimo спроектирован с набором стандартных планов развертывания для WAR, EJB JAR, и EAR-файлов. Во многих ситуациях этих встроенных по умолчанию планов достаточно. Они делают развертываемыми большинство архивов без необходимости создания специфичных для Geronimo планов развертывания.

Все J2EE-дескрипторы (второй столбец таблицы 1) должны быть упакованы в архив. J2EE-спецификация (смотрите раздел "Ресурсы") указывает месторасположение каждого ресурса, как показано на рисунке 2 (на котором изображены только архивы, расположенные на сервере). Однако расположение планов развертывания Geronimo несколько гибче; одно из возможных месторасположений показано на рисунке 2 прямоугольниками, ограниченными пунктирными линиями:


Рисунок 2. Расположение планов развертывания Geronimo в J2EE-архивах

Планы развертывания, конфигурации и компоновщики
Вы, наверное, интересуетесь тем, что происходит внутри Geronimo при развертывании Web-модуля. Из первой части вы знаете, что ядро видит только конфигурации. Во время развертывания вызывается специализированный программный компонент, называемый компоновщиком, для преобразования XML-планов развертывания и дескрипторов развертывания в конфигурацию, с которой может работать ядро. Вы время исполнения ядро может оставаться свободным от XML, работая только с конфигурацией. Система Geronimo имеет много специализированных компоновщиков. Например, EARConfigBuilder знает, как создать конфигурацию для корпоративного J2EE-приложения, обрабатывая специфичные для Geronimo планы развертывания и стандартные J2EE-дескрипторы развертывания.

Если вы сравните рисунок 2 с таблицей 1, то можете обнаружить план развертывания для Geronimo в каждом типе архивного файла. Geronimo дает вам возможность выбрать месторасположение этих планов развертывания:

  • Внутри архива вместе со связанным дескриптором развертывания, как показано в квадрате, ограниченном точками, на рисунке 2
  • Вне архива в виде независимого XML-файла, а также указанным в качестве входной информации при использовании программы развертывания для развертывания архива

Если вы расположили планы развертывания вне архива, вам не нужно использовать имя, указанное в третьем столбце таблицы 1; вы можете использовать для плана любое имя файла. Вынесение планов развертывания из архива имеет некоторые преимущества:

  • Сами архивные файлы остаются обычными J2EE-архивами, которые могут быть развернуты на любом совместимом сервере.
  • Легко выполняются изменения, поскольку нет необходимости разархивировать, изменять и повторно архивировать планы развертывания.
  • Вы можете производить изменения в графическом режиме, используя программу, которая в свою очередь редактирует файл. Это может быть программа развертывания, совместимая с JSR-88, или даже агент автоматизированного управления системой.

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

Для беглого знакомства с тем, что происходит в Geronimo при развертывании J2EE-модуля, взгляните на планы развертывания, конфигурации и компоновщики.



В начало


Пример "Really Big Pet Store"

Теперь, понимая взаимосвязь между дескрипторами развертывания и планами развертывания Geronimo, вы готовы развернуть Web-приложение в Geronimo. Пример, который я буду использовать в этой статье, называется "Really Big Pet Store" (очень большой зоомагазин). Он является частью приложения электронной коммерции (e-commerce), отображая каталог и управляя простой корзиной покупок. Магазин не большой; фактически он очень маленький. Однако в магазине продаются очень большие животные. На рисунке 3 изображен пример товаров магазина:


Рисунок 3. Перечень товаров магазина "Really Big Pet Store"

Мы будем работать с тремя версиями этого примера, каждая из которых более сложна и использует другой J2EE-пакет для развертывания:

  • Автономное Web-приложение. В него входят сервлеты, JSP и библиотека тегов JSP, а также не используются какие-либо внешние ресурсы. Эта версия архивируется в WAR-файл.
  • Модификация первой версии, обращающаяся к EJB-компоненту для получения информации о категории продуктов. EJB-компонент является сессионным компонентом и имеет локальный вид. Этот архив объединяется в EAR-файл.
  • Дальнейшая эволюция второй версии, в которой сессионный EJB-компонент становится фасадом для EJB-компонента управления данными. EJB-компонент управления данными совместим с EJB2 и использует CMP для доступа к реляционной базе данных. Приложение объединяется в EAR-файл. Однако для него необходимо наличие адаптера ресурсов (JDBC-коннектора), архивированного в RAR-файл. Смотрите раздел "Загрузка", где приведена ссылка на исходный код примера "Really Big Pet Store".

Развертывание WAR

Первая версия примера архивируется в reallybigpet.war, который вы можете найти в каталоге war_only\dist дистрибутива исходного кода примера. В таблице 2 перечислены компоненты этой версии приложения. Все эти компоненты используются и в следующих версиях с изменениями, о которых будет сказано.


Таблица 2. Компоненты Web-приложения "Really Big Pet Store"
Имя файлаРасположение файла с исходным кодом (каталог)Описание
StoreController.javasrcСервлет, выступающий как входной контроллер в этом приложении MVC-стиля. Контроллер перенаправляет входящие запросы на одну из двух JSP-страниц этого приложения. Далее, он обращается к необходимым бизнес-данным из EJB-компонента (неявно через ReallyBigStore.java), и присоединяет их к атрибутам сессии для отображения JSP-страницей презентационного уровня.
ReallyBigStore.javasrcВспомогательный класс, предоставляющий статические методы для библиотеки тегов JSP. Он также содержит вспомогательную функцию, получающую информацию о категориях и товарах. Первая версия генерирует свои собственные данные, последующие версии обращаются за этой информацией к EJB-компонентам.
bigpetstore.jspjspЭто совместимая с JSP 2.0 реализация витрины магазина, отображающая все товары, доступные для продажи. Код полностью свободен от встроенного Java-кода (не использует сценарии). Он интенсивно использует JavaServer Pages Standard Tag Library (JSTL), а также пользовательскую библиотеку тегов.
checkoutcart.jspjspЭта JSP-страница реализует каркас корзины покупок для контроля заказов. Код не использует скриптлеты, а применяет JSTL.
bigpetstore.cssjspТаблица стилей, используемая двумя JSP-страницами этого приложения.
bigpetstore-taglib.jarWEB-INF/libПользовательская библиотека JSP-тегов, используемая приложением для предоставления данных без применения EJB-компонентов.
Product.java, LineItem.java, Category.javasrcКорпоративные компоненты JavaBeans, используемые JSP-страницами при обработке информации о зоомагазине.

Используя таблицу 2 в качестве справочника, вы можете исследовать различные файлы дистрибутива с исходным кодом для того, чтобы понять, как все работает. Сейчас основной интерес - это развертывание и запуск приложения в Geronimo. На рисунке 4 показано, что происходит при развертывании приложения:


Рисунок 4. Развертывание Web-модулей в Geronimo

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

Запустите Geronimo, перейдя в каталог установки Geronimo и введя команду:

java -jar bin\server.jar

Для запуска конкретной конфигурации в конце команды можно также добавить название этой конфигурации (Смотрите в первой части статьи определение конфигурации). Для целей этого примера подходит системная конфигурация по умолчанию. Вы можете отобразить список всех модулей, выполняющихся при этой конфигурации, при помощи команды:

java -jar bin\deployer.jar list-modules

При этом программа запросит вас ввести имя пользователя и пароль. Используйте system в качестве имени пользователя и manager в качестве пароля. Обратите внимание, что для вывода списка модулей используется программа развертывания. Предоставлен командный файл под названием lm.bat для уменьшения утомительного ввода с клавиатуры.

Для развертывания архива reallybigpet.war скопируйте, прежде всего, Web-приложение в домашний каталог Geronimo и выполните команду:

java -jar bin\deployer.jar deploy reallybigpet.war

Промежуточные версии Geronimo
До выпуска официальной версии 1.0 (и J2EE-сертификации) бинарные файлы Geronimo выпускаются в виде промежуточных версий. Каждая успешная версия предоставляет новые возможности. Промежуточные версии (milestone build) обозначаются буквой M и цифрой; например, третья промежуточная версия обозначается M3. Загрузка и использование промежуточных версий - это лучший способ получения относительно стабильной версии для тестирования и экспериментов. Внимательно читайте информацию по версии о том, какие функции отсутствуют или пока являются не стабильными.

Вы можете также использовать командный файл dp.bat. По истечении некоторого времени программа развертывания должна закончить работу и сообщить об успешном развертывании. Обратите внимание на то, что в данном случае нет необходимости использовать отдельный план развертывания geronimo-jetty.xml. Сейчас прекрасно работает план Geronimo по умолчанию для WAR-файлов. Если вы повторно выполните команду просмотра списка модулей, то увидите работающий модуль. По умолчанию он называется reallybigpet, так же как и JAR-файл.

Вы можете попробовать поработать с приложением, используя URL http://localhost:8080/reallybigpet/store.cgi.

Управление жизненным циклом развернутого модуля

Как вы помните из первой части статьи, жизненный цикл компонентов GBean может управляться Geronimo. Вы можете использовать эту возможность для управления поведением Web-приложения. Для остановки приложения используйте команду:

java -jar bin\deployer.jar stop reallybigpet

Если вы попробуете обратиться к URL магазина после остановки приложения, Geronimo не ответит. Для повторного запуска приложения используйте команду:

java -jar bin\deployer.jar start reallybigpet

Для полного удаления бинарных файлов и метаданных этого модуля из Geronimo используйте команду undeploy:

java -jar bin\deployer.jar undeploy reallybigpet

После удаления модуля его снова необходимо развернуть для того, чтобы он опять стал доступен. Если вы обновляете уже развернутый модуль, вы можете использовать команду redeploy. Она эффективно удаляет существующую версию и развертывает новую за один шаг.

Развертывание EAR

Вторая версия примера приложения добавляет в смесь не сохраняющий состояния (stateless) сессионный EJB-компонент. Сервлет контроллера обращается к этому компоненту, чтобы получить список категорий для отображения. Если вы захотите исследовать исходный код, посмотрите в каталог ejb:

  • CategoriesHomeLocal.java – домашний интерфейс.
  • CategoriesLocal.java – объектный интерфейс.
  • CategoriesBean.java – реализация EJB-компонента

Описание нового сессионного компонента вы можете найти в дескрипторе развертывания ejb-jar.xml, приведенном в листинге 1:


Листинг 1. Не сохраняющий состояния сессионный компонент
                
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 
'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>
<ejb-jar>
  <enterprise-beans>
      <session>
          <display-name>Categories Stateless Session Bean Local Interfaces</display-name>
          <ejb-name>CategoriesEJB</ejb-name>
          <local-home>com.ibm.dw.reallybigpet.ejb.CategoriesHomeLocal</local-home>
          <local>com.ibm.dw.reallybigpet.ejb.CategoriesLocal</local>
          <ejb-class>com.ibm.dw.reallybigpet.ejb.CategoriesBean</ejb-class>
          <session-type>Stateless</session-type>
          <transaction-type>Container</transaction-type>
      </session>
  </enterprise-beans>

</ejb-jar>

StoreController вызывает метод getCats() из класса ReallyBigPetStore для получения категорий и установки атрибута cats, как показано в листинге 2. Этот атрибут используется bigpetstore.jsp для отображения категорий.


Листинг 2. Извлечение бизнес-данных для представления в JSP
                
package com.ibm.dw.reallybigpet;
...

public class StoreController extends HttpServlet {
    
   ....
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
          throws ServletException, IOException {
        ...       
        ArrayList cats = ReallyBigPetStore.getCats();
        session.setAttribute("cats", cats);
        ...
        }   
        ...    
    }

Вместо генерирования своих собственных данных ReallyBigPetStore теперь обращается к сессионному компоненту для получения информации о категориях. В листинге 3 приведен код обращения к EJB:


Листинг 3. Получение данных о категориях через сессионный EJB-компонент
                
package com.ibm.dw.reallybigpet;
import java.util.*;

import com.ibm.dw.reallybigpet.ejb.CategoriesHomeLocal;
import com.ibm.dw.reallybigpet.ejb.CategoriesLocal;
import  javax.naming.InitialContext;
import javax.naming.Context;

public class ReallyBigPetStore {
    public ReallyBigPetStore() {
    }
    public static ArrayList getCats() {
    CategoriesLocal cl = null;
    try {
      Context ic = new InitialContext();
      Object o = ic.lookup("java:comp/env/CatEJB");  
      CategoriesHomeLocal ejbhome = (CategoriesHomeLocal) o;
        cl = ejbhome.create();
    } catch (Exception ex) {
      ex.printStackTrace();
      }
    
   return cl.getCats(); 
    }
  }

Дескриптор развертывания для WAR-архива теперь необходим для ссылки на сессионный EJB-компонент. Новый файл web.xml с дополнительным элементом <ejb-local-ref> приведен в листинге 4.


Листинг 4. Дескриптор развертывания со ссылкой на локальный сессионный компонент
                
<?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_4.xsd"
    version="2.4">
    ...   
    <ejb-local-ref>
        <ejb-ref-name>CatEJB</ejb-ref-name>
        <ejb-ref-type>Session</ejb-ref-type>
        <local-home>
        com.ibm.dw.reallybigpet.ejb.CategoriesHomeLocal
        </local-home>
        <local>com.ibm.dw.reallybigpet.ejb.CategoriesLocal</local>
   </ejb-local-ref>
</web-app>

Дескриптор развертывания application.xml для EAR, приведенный в листинге 5, указывает архивы внутри EAR и обеспечивает основу контекста (context-root) для приложения:


Листинг 5. Дескриптор развертывания обеспечивает основу контекста для EAR
                
<application 
       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/application_1_4.xsd"
       version="1.4">
    <module>
        <ejb>bigpetstore-ejbs.jar</ejb>
    </module>
    <module>
        <web>
            <web-uri>reallybigpet.war</web-uri>
            <context-root>/ReallyBigPetStore</context-root>
        </web>
    </module>
</application>

Получение самой последней версии Geronimo
Самым простым способом получения последней версии Geronimo является загрузка последней нестабильной версии с сайта Geronimo (смотрите раздел "Ресурсы"). Другой способ - если вы авантюрист и имеете достаточный практический опыт работы с системами контроля версий, то можете скомпоновать абсолютно последнюю версию Geronimo, проверив код в репозитории. Это процесс больше является искусством, чем наукой. На вашей системе должны быть установлены и работать Subversion, CVS, Maven и Ant (смотрите раздел "Ресурсы"). Следуйте инструкциям официального Geronimo wiki. Разработчики проверяют изменения кода постоянно; если у вас что-нибудь не получится, вы можете повторить процедуру позднее.

Теперь вы можете развернуть reallybigpet.ear (из каталога dist, но убедитесь в том, что предварительно удалили предыдущий пример).

Удивительно, но хотя архив содержит внешние к WAR EJB-компоненты, вам не нужно создавать дополнительный план развертывания geronimo-application.xml для работы модуля. Причина этого заключается в том, что Geronimo пытается как можно больше упростить развертывание. На самом деле он ищет подходящий EJB, просматривая домашний и объектный интерфейсы при разрешении ссылки.

Развертывание коннектора TranQL в RAR

Последняя версия приложения содержит еще один EJB-компонент. На этот раз это EJB-компонент управления данными (entity), использующий CMP2 и EJB-QL для доступа к реляционной базе данных. Эта внешняя зависимость значительно усложняет установку.

Вы должны записать соответствующие данные в реляционной базе данных. Для вашей RDBMS может быть адаптирован сценарий addtab.sql. Сценарий, приведенный в листинге 6, работает с сервером MySQL:


Листинг 6. SQL-сценарий для записи таблицы в УОИ-компонент управления данными CMP2
                
drop table petcats;
create table petcats (
  id varchar(20) NOT NULL,
  name varchar(50) NOT NULL,
  PRIMARY KEY (id)

  )               ;
INSERT INTO petcats VALUES( '1', 'New');
INSERT INTO petcats VALUES( '2', 'Clearance');

Затем вам необходимо найти JDBC-драйвер для вашей RDBMS и скопировать его в подкаталог каталога репозитория Geronimo. Например, скопируйте драйвер MySQL для этого примера в каталог \mysql\jars.

Для развертывания JDBC-коннектора вы используете коннектор из TranQL, который является частью Geronimo. Коннектор обеспечивает организацию пула соединений и загружает указанный вами JDBC-драйвер. Для настройки этого коннектора вам необходим специфичный для Geronimo план развертывания, поскольку Geronimo не может догадаться, какой JDBC-драйвер вы хотите использовать. Просмотрите файл geronimo-ra.xml, расположенный в каталоге ddcmp. В листинге 7 приведен фрагмент этого файла:


Листинг 7. Развертывание TranQL JDBC-коннектора
                
<?xml version="1.0"?>
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector"
   version="1.5" configId="PetsDB" parentId="org/apache/geronimo/Server">

  <dependency>
    <uri>mysql/jars/mysqldriver.jar</uri>
  </dependency>
  <resourceadapter>
    <outbound-resourceadapter>
      <connection-definition>
        <connectionfactory-interface>
          javax.sql.DataSource
        </connectionfactory-interface>
        <connectiondefinition-instance>
          <name>PetsDataSource</name>
     ...
  </resourceadapter>

</connector>

В geronimo-ra.xml вы должны отредактировать запись и настроить коннектор на ваш JDBC-драйвер. Обратите внимание на использование ID конфигурации PetsDB в данном случае.

Теперь вы можете развернуть адаптер ресурсов. Используйте команду:

java -jar bin\deployer deploy repository\tranql\rars\tranql-connector-1.0-M4.rar  
  geronimo-ra.xml

Вы должны заглянуть в каталог repository\tranql\rars, чтобы узнать точное название, поскольку оно разное для промежуточных версий и для последней версии Geronimo. (Смотрите вкладки "Промежуточные версии Geronimo" и "Получение самой последней версии Geronimo" для дополнительной информации). После успешного развертывания вы можете выполнить команду list-module и убедиться в том, что исполняется конфигурация (модуль) PetsDB.

Система Geronimo запускает экземпляр Derby RDBMS (смотрите раздел "Ресурсы") в качестве источника данных по умолчанию. Для данного примера вы можете использовать этот экземпляр базы данных. Дополнительную информацию вы можете найти в файле README.TXT, включенном в дистрибутив исходного кода примера.

Конфигурации Geronimo и загрузчики классов

При использовании плана развертывания для Geronimo, как в примере адаптера ресурсов, вы можете указать ID конфигурации (атрибут configId) и ID родительской конфигурации (атрибут parentId). Это даст вам возможность установить иерархию загрузчика классов, разрешая совместное использование кода развернутыми по отдельности модулями. На рисунке 5 изображена иерархия конфигураций:


Рисунок 5. Конфигурации и загрузчики классов

На рисунке 5 конфигурация A является предком конфигурации B, а конфигурация B - это EAR-модуль, содержащий WAR-файл. Белые круги обозначают загрузчики классов Geronimo (в действительности URLClassloader). В данном случае загрузчик классов конфигурации B является потомком загрузчика классов конфигурации A, что дает возможность доступа к коду конфигурации A из конфигурации B. WAR-файл всегда имеет свой собственный загрузчик классов, препятствуя другому коду в том же самом EAR обращаться к классам в WAR.

Развертывание CMP2 EJB в EAR

Последняя версия примера "Really Big Pet Store" использует EJB-компонент управления данными для получения информации о категориях. В данном случае за информацией о категориях к новому компоненту управления данными обращается сессионный компонент. Исходный код EJB-компонента управления данными находится в каталоге ejbcmp:

  • CategoryHome – домашний интерфейс.
  • CategoryRemote – удаленный интерфейс.
  • CategoryBean – реализация EJB-компонента.

Ключ для отображения CMP2 EJB находится в дескрипторе развертывания ejb-jar.xml, приведенном в листинге 8.


Листинг 8. Дескриптор развертывания, показывающий отображения компонента CMP2 и запроса EJB-QL
                
<?xml version="1.0" encoding="US-ASCII"?>
<ejb-jar 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/ejb-jar_2_1.xsd"
    version="2.1">
    ...
    <enterprise-beans>
 
        <entity>
       ....
            <ejb-name>CategoryBean</ejb-name>
            <home>com.ibm.dw.reallybigpet.ejb.cmp.CategoryHome</home>
            <remote>com.ibm.dw.reallybigpet.ejb.cmp.CategoryRemote</remote>
            <ejb-class>com.ibm.dw.reallybigpet.ejb.cmp.CategoryBean</ejb-class>
            <persistence-type>Container</persistence-type>
            <prim-key-class>java.lang.String</prim-key-class>
            <reentrant>false</reentrant>
            <cmp-version>2.x</cmp-version>
            <abstract-schema-name>CategoryBean</abstract-schema-name>
            <cmp-field><field-name>id</field-name></cmp-field>
            <cmp-field><field-name>name</field-name></cmp-field>
            <primkey-field>id</primkey-field>
            <resource-ref>
                <description>
                    This is a reference to a JDBC database.
                </description>
                <res-ref-name>jdbc/basic/entityDatabase</res-ref-name>
                <res-type>javax.sql.DataSource</res-type>
                <res-auth>Container</res-auth>
            </resource-ref>
            ...
            <query>
                <query-method>
                    <method-name>findAll</method-name>
                    <method-params/>
                </query-method>
                <ejb-ql>
                <![CDATA[SELECT OBJECT(a) FROM CategoryBean AS a]]>
                </ejb-ql>
            </query>

        </entity>

     </enterprise-beans>
</ejb-jar>

В листинге 8 вы можете увидеть спецификацию постоянных полей компонента управления данными. Также, для извлечения всех категорий из RDBMS указан метод findAll() при помощи EJB-QL.

Для корректного развертывания компонента управления данными вы должны создать план развертывания для Geronimo - файл openejb-jar.xml, приведенный в листинге 9:


Листинг 9. План развертывания Geronimo со ссылкой на развернутый коннектор TranQL
                
<?xml version="1.0"?>
<openejb-jar
    xmlns="http://www.openejb.org/xml/ns/openejb-jar"
    configId="com/ibm/dw/ReallyBigPet"
    parentId="PetsDB">
    <cmp-connection-factory>
        <application>null</application>
        <module>PetsDB</module>
        <name>PetsDataSource</name>
    </cmp-connection-factory>
    <enterprise-beans>
        <entity>
            <ejb-name>CategoryBean</ejb-name>
            <jndi-name>CategoryBean</jndi-name>
            <table-name>petcats</table-name>
            <cmp-field-mapping>
                <cmp-field-name>id</cmp-field-name>
                <table-column>id</table-column>
            </cmp-field-mapping>
            <cmp-field-mapping>
                <cmp-field-name>name</cmp-field-name>
                <table-column>name</table-column>
            </cmp-field-mapping>
            <resource-ref>
                <ref-name>jdbc/basic/entityDatabase</ref-name>
                <application>null</application>
                <module>PetsDB</module>
                <name>PetsDBPool</name>
            </resource-ref>
        </entity>
    </enterprise-beans>
</openejb-jar>

Листинг 9 создает ссылку на развернутый коннектор PetsDB и указывает точное отображение поля и таблицы. Обратите внимание, что этот файл является частью EJB JAR внутри EAR-файла. Они архивируются вместе для удобства.

Теперь вы можете развернуть последнюю версию приложения reallybigpet.ear. После успешного развертывания вы можете попробовать поработать с приложением (используя URL http://localhost:8080/ReallyBigPetStore/store.cgi) и просмотреть категории, извлекаемые из RDBMS.

Чтобы увидеть результат обновления таблицы базы данных, которую использует EJB-компонент управления данными CategoryBean, зайдите в интерфейс командной строки базы данных и ведите следующий SQL-запрос:

INSERT INTO petcats VALUES( '3', 'Promotional');

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



В начало


Взгляд внутрь JMX-структуры Geronimo при помощи MC4J

Для грандиозного финала загрузите и установите консоль MC4J JMX (смотрите раздел "Ресурсы") и просмотрите атрибуты и операции, отображаемые вашим развернутым Web-приложением.

MC4J уже имеет поддержку Geronimo, подключаясь через RMI-реестр. Выберите "Create Server Connection..." из меню Management. Выберите Geronimo в "Server Connection Type" и введите значение system для Principle и manager для Credentials. На рисунке 6 изображено, как выглядит приложение "Really Big Pet Store" в консоли управления JMX:


Рисунок 6. Вид развернутого Geronimo корпоративного приложения в консоли JMX

Внутри контейнера Geronimo управляет развернутыми компонентами как компонентами GBean (смотрите часть 1). Кроме предоставления возможности управления своим жизненным циклом для Geronimo, компонент GBean может также реализовывать атрибуты и операции, которые являются управляемыми через JMX. Эти атрибуты и операции экспонируются через компоненты JMX MBean. На рисунке 7 показано, как экспонируются атрибуты приложения через это JMX-подключение:


Рисунок 7. Компоненты корпоративного приложения, экспонируемые через JMX



В начало


Заключение

Geronimo - это не первый J2EE 1.4 контейнер с открытым исходным кодом. Но его уникальное предложение "приди и попробуй", его элегантный дизайн и огромная техническая и проверенная база исходного кода Apache, которую он использует, энергичное принятие глобальным сообществом разработчиков - все это отличает Geronimo от остальных продуктов. Аналогично знаменитому проекту Web-сервера Apache, Geronimo со временем будет развиваться для выполнения своего предназначения. Проект является важным символически подтверждением окончательной зрелости принципов открытого исходного кода в разработке Java-приложений.




В начало


Загрузка

ОписаниеИмяРазмерМетод загрузки
Source codej-geron2code.zip3.2 MB  FTP
Информация о методах загрузки


Ресурсы

  • Оригинал статьи Tame this J2EE 1.4 bronco.

  • Прочтите первую часть этого цикла "Механизм J2EE 1.4, который мог бы быть", являющуюся введением и обзором концепций Geronimo.

  • Загрузите Gluecode Standard Edition - сервер приложений с открытым исходным кодом, основанный на Apache Geronimo.

  • Gluecode Software CTO и главный создатель Geronimo Джереми Бойнз (Jeremy Boynes) делится своим видением перспектив Geronimo, направлений Java-программирования и состояния программного обеспечения с открытым исходным кодом в своем недавнем интервью для developerWorks.

  • На официальном сайте проекта Geronimo находятся последние исходные коды и бинарные файлы, активное сообщество подписчиков почтовой рассылки и wiki.

  • Для выполнения JMX-подключения к вашему серверу Geronimo загрузите последнюю версию MC4J, консоли управления JMX с открытым исходным кодом, работающей с различными серверами.

  • Домом Geronimo является Apache Software Foundation, где вы можете прочитать детальный текст последней лицензии Apache License.

  • Текст альтернативных видов лицензий на программное обеспечение с открытым исходным кодом можно найти в Lesser General Public License и General Public License на сайте GNU Project.

  • Изучите более детально Jetty (контейнер сервлетов и JSP, интегрированный в Geronimo по умолчанию) на сайте проекта.

  • Исследуйте Tomcat - альтернативный контейнер сервлетов и JSP-страниц для Geronimo.

  • Исследуйте возможности OpenEJB - EJB-контейнера в Geronimo.

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

  • Geronimo использует Apache Scout для реализации совместимости с JAXR for Web services.

  • Geronimo интегрирует Axis (универсальный стек Web-служб) для достижения совместимости с WS-I Basic Profile.

  • Одной из целей Geronimo является использование одного и того же набора средств для реализации как EJB, так и "легковесной" POJO-персистентности. Решением является проект TranQL.

  • Команда разработчиков Geronimo плотно работает с группой ObjectWeb для поддержки транзакций. HOWL и JOTM являются ключевыми проектами ObjectWeb, относящимися к Geronimo.

  • Для удовлетворения требований управляемости Geronimo использует библиотеку MX4J для реализации JMX.

  • Geronimo использует отличную библиотеку генерирования кода cglib для установки каналов перехвата (interception pipelines) для ссылок inter-GBean.

  • Geronimo использует Apache Maven для управления компоновкой кода нескольких проектов и Apache Ant для компоновки индивидуальных проектов. Для контроля версий большинства проектов применяется Subversion.

  • Для получения дополнительной информации о Java Management Extensions (JMX) просмотрите цикл Синга Ли " От черных ящиков к предприятиям: JMX 1.1 " (developerWorks, осень 2002).

  • Вы можете изучить альтернативный сертифицированный сервер J2EE 1.4 с открытым исходным кодом, доступный по лицензии LGPL, на Web-сайте Java Open Application Server (JOnAS).

  • На странице J2EE-спецификаций размещены детальные спецификации J2EE 1.4.

  • Менеджеры, архитекторы и разработчики, использующие Java-технологии, могут открыть окно в J2EE-технологии, прочитав цикл статей J2EE Pathfinder Кайла Гэбхарта (Kyle Gabhart).

  • Прочтите статью "Освобождение Java: Интервью с Джейсоном Хантером (Jason Hunter)" (developerWorks, апрель 2002) для изучения истории участия проектов с открытым исходным кодом в Java Community Process.

  • Подключайтесь к сообществу developerWorks, участвуя в блогах developerWorks.

  • В зоне Java-технологий сайта developerWorks вы найдете статьи по каждому аспекту Java-программирования.

  • Посетите Developer Bookstore для получения исчерпывающего списка технических книг, включающего сотни наименований, относящихся к Java.


Об авторе

author

Синг Ли (Sing Li) - активный автор. Он участвовал в написании книг: "Знакомство с JavaServer Pages", "Профессиональное использование Apache Tomcat 5, Pro JSP, третье издание", "Early Adopter JXTA", "Профессиональное использование Jini", "Знакомство с J2ME: От новичка до профессионала, третье издание" и многих других. Он постоянно публикуется в технических журналах и является активным проповедником эволюции VON и P2P. Синг является консультантом и независимым писателем. Связаться с ним можно по электронной почте westmakaha@yahoo.com.




Выскажите мнение об этой странице


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



ДаНетНе знаю
 


 


12345
 


Поделиться этой статьей:

забобрить забобрить memori сохранить в memori




В начало


IBM обладает всеми авторскими правами касательно информации, расположенной на developerWorks. Использование информации приведенной на этом ресурсе без явного письменного разрешения от IBM или первоначального автора запрещены. Если Вы желаете использовать информацию с developerWorks, пожалуйста воспользуйтесь регистрационной формой для того, чтобы связаться с нами запрос на использование материалов developerWorks Россия.

    IBM в России Конфиденциальность Контакты