В августе 2003 года организация Apache Software Foundation собрала десятки разработчиков открытых проектов для создания проекта Apache J2EE Server Project, и появился на свет Apache Geronimo. Geronimo можно рассматривать как операционную систему для отдельного предприятия. Он объединяет множество открытых проектов в единую структуру, где координируется создание пакета предприятия.
Geronimo – один из наиболее сложных проектов, который взял на себя сообщество открытых проектов, сравнимый по значимости с Linux. (Некоторые обозреватели полагают, что Geronimo – проверка устойчивости практики открытых проектов и их способности обрабатывать такой уровень сложности.) Также одной из главных целей Geronimo – сертификация J2EE 1.4 – достижение, потребовавшее очень много времени. Тем не менее, Geronimo уже выпустил несколько промежуточных изданий и неуклонно движется к магическому выпуску 1.0.
Как и большинство других операционных систем предприятия, Geronimo построен на ядре -- микроядро, которое лежит в основе всего, расположенного выше. Ядро Geronimo - агностик J2EE. Его единственной целью является управление строительными блоками Geronimo, называемые Geronimo Beans или GBeans для краткости.
Почти все в Geronimo – включая контейнеры, коннекторы и приложения -- GBean. Величина разбиения GBeans меняется соответственно. Например, маленький сервлет, который работает на web-контейнере - GBean, а сам web-контейнер является GBean. GBeans, особенно большие, могут составлять другие GBeans.
Ядро Geronimo управляет жизненными циклами GBeans и зависимостями между ними. GBeans могут удерживать состояния, определять зависимости между ними и реагировать на события жизненного цикла. Состояние GBean может стать устойчивым с помощью поддержки структуры GBean. Так как пример запуска Geronimo есть в сущности слияние запусков GBeans, эта функциональность может быть использована для хранения текущего состояния Geronimo и восстановления этого состояния позже. Эта способность уникальна, так как не требует никаких файлов конфигурации. Вместо этого, все состояния хранятся в GBeans. Более того, можно управлять GBeans через интерфейс управления, давая им возможность быть запущенными, остановленными и отредактированными на лету.
GBean могут запросить информацию о том, когда запускаются другие GBeans, с определенным именем файла. После того, как начал работать GBean, который соответствует этому имени, ссылка на запущенный GBean автоматически отправляется в GBean, который запросил информацию. Это называется вливание зависимости. Вливание зависимости делает GBeans мощным инструментом для построения слабо связанных систем.
Например, GBean, который представляет контейнер Enterprise JavaBeans (EJB) может обратиться к GBeans, которые представляют EJBs. После того, как запущен GBean, который представляет EJB, ядро уведомляет контейнер EJB об этотом. Создателям GBean не нужно соотносить их GBeans с другими GBeans; достаточно запросить информацию. После запуска GBean, все другие GBeans, которые запросили информацию о нем, становятся осведомлены об этом.
Архитектура размещения Geronimo касается того, как создавать, запускать, останавливать, хранить, извлекать и удалять GBeans, которые представляют компоненты J2EE или другие компоненты (не-J2EE), размещенные в Geronimo.
Конфигурация – ключевая единица размещения. Конфигурация – это логически сгруппированное собрание одного или нескольких GBeans и загрузчика классов. Конфигурация может храниться в хранилище конфигурации, стандартном механизме хранения Geronimo. Geronimo управляет GBeans на уровне конфигурации; конфигурации запускаются сервером, а пользователь может остановить или удалить их. У каждой конфигурации есть физическое местоположение в дистрибутиве Geronimo, в папке под названием config-store. Конфигурации, поступающие с дистрибутивом, представляют службы ядра. Каждое новое размещенное приложение создает новую конфигурацию.
Добавление нового компонента к Geronimo проходит в четыре этапа, является ли это компонентом ядра или приложением:
- Построение GBean или GBeans, которые фиксируют информацию о компоненте и его поведении
- Группировка GBeans в конфигурацию загрузчиком классов, связанным с ними
- Хранение конфигурации в хранилище конфигурации
- Запуск конфигурации
После завершения этого процесса, информация о компонентах сохраняется при перезапуске сервера. Это объясняет один аспект Geronimo. У дистрибутива Geronimo нет дескрипторов размещения, так как конфигурации просто заменяют их. Вся информация о размещении переводится в GBeans, сгруппированные как конфигурации и хранящиеся в хранилище конфигураций. Рисунок 1 иллюстрирует, как GBeans создаются, запускаются и хранятся внутри Geronimo.
Рисунок 1. Архитекура конфигурации и размещения Geronimo
Как вы можете видеть на рисунке 1, GBeans строятся одним из трех способов:
-
Из планов -
План – это сериализация XML GBean. Планы используются для конфигурации компонентов ядра Geronimo. Строители конфигурации Geronimo конструируют GBeans из планов и хранят их в хранилище конифигурации. Эти планы живут в исходном коде Geronimo, но считываются и хранятся как конфигурации, когда строится бинарное распределение. Они не включены в бинарное распределение, так как уже послужили своей цели.
-
Из модулей размещения J2EE - Для размещения чего-нибудь, не являющегося GBean в Geronimo, разместитель Geronimo создает GBean, который хранит предоставленную им информацию. Например, рассмотрим EJB, который включает в себя файл ejb-jar.xml и некоторые классы. Разместитель Geronimo создает GBean, который содержит информацию, которую представляет модуль, и хранит GBean в хранилище конфигурации.
- Путем программирования - Если GBean не может быть создан из плана или модуля размещения, его следует создать программным путем. Это – наименее используемая опция.
Хорошим примером интеграции проекта с Geronimo служит интеграция контейнера EJB. Вы моделируете контейнер EJB как один или более GBeans, группируете их как конфигурацию и представляете конфигурацию как план. Geronimo считывает план и строит, хранит и запускает конфигурацию.
GBean контейнера EJB не знает о EJBs, которые размещены в нем. Но он обращается с помощью ядра к GBeans, которые соответствуют представлению GBean, принадлежащего EJB. Когда разработчик J2EE создает модуль EJB и размещает его, разместитель Geronimo создает GBean, который представляет модуль EJB, хранит его в хранилище конфигурации и запускает этот GBean. После запуска Gbean ядро вливает GBean в GBean контейнера EJB, потому что последний запросил информацию о GBeans, принадлежащим EJB. Это вливание уведомляет контейнер EJB о EJB и дает ему возможность обслуживать запросы, направленные к EJB.
В этом разделе объясняется, что происходит за сценой, когда выполняются коаманды размещения. Все показанные команды работают из инсталляционной директории Geronimo. Эта команда запускает сервер Geronimo:
$ java -jar bin/server.jar configuration1 ... |
После выполнения этой команды на экран выводится информация, подобная той, которую вы видите в листинге 1:
Листинг 1. Запуск Сервера
.......
10:56:10,580 INFO [Configuration] Started configuration org/apache/geronimo/System
10:56:10,668 INFO [RMIRegistryService] Started RMI Registry on port 1099
10:56:10,836 INFO [ReadOnlyRepository] Repository root is
file:/home/hemapani/drafts/dev-works/geronimo-1.0-M3/repository/
10:56:10,890 INFO [ConfigurationManagerImpl] Loaded
Configuration geronimo.config:name="org/apache/geronimo/SystemJMS"
...
|
Geronimo выбирает конфигурацию из хранилища конфигураций и запускает их по очереди. Каждая конфигурация запускает GBeans, связанные с ней.
Команда для запуска конфигурации выглядит так:
$ java -jar bin/server.jar configuration1 ... |
Это запускает конфигурацию вместе со всеми зависимостями. Вы можете найти все имеющиеся конфигурации в config-store/index.properties, но будьте осторожны: не изменяйте этот файл, так как это может разрушить вашу инсталляцию. Команда запускает все GBeans в каждой конфигурации, которая запускается.
Команда для размещения модуля выглядит так:
$ java -jar bin/deployer.jar deploy YourApplication.ear |
Это создает GBeans из модуля J2EE, например, корпоративный архив (EAR). Он создает конфигурацию и хранит ее в хранилище конфигураций в новой папке, которую Geronimo создает внутри папки config-store дистрибутива Geronimo. После того как установлена новая конфигурация, она запускается.
Команда для удаления модуля выглядит так:
$ java -jar bin/deployer.jar undeploy module-id |
GBeans, связанные с модулем, прекращают работу, а затем удаляются из хранилища конфигураций.
Команда для размещения сервиса выглядит так:
$ java -jar bin/deployer.jar deploy YourService-plan.xml |
Вы можете использовать эту команду для размещения одного или более индивидуальных GBeans. Файл XML - это XML-сериализация GBeans. У этой команды нет ничего общего с J2EE, и она может быть использована для размещения индивидуальных служб в Geronimo. Пример приложения, описанного в следующем разделе, продемонстрирует эту способность.
Для демонстрации понятий, обсуждаемых до настоящего времени, эта статья предоставляет простой пример эхо сервера, написанного с исользованием архитектуры GBeans Geronimo. Для размещения сервера используется размещение командной строкой Geronimo. Приложение показывает, как заказной компонент – тот, у которого нет ничего общего J2EE – может быть размещен в Geronimo. Каждый разместитель приложения J2EE использует тот же самый механизм для преобразования компонента J2EE в GBeans, хранит их как конфигурации и запускает.
Проделайте следующие шаги для подготовки запуска приложения:
- Загрузите дистрибутив Geronimo (см. Ресурсы для ссылки на страницу загрузки web-сайта Apache) и распакуйте его в директорию по вашему выбору. С этого момента я буду ссылаться на эту директорию, как на домашнюю Geronimo или $GERONIMO_HOME.
- Загрузите пример кода (см. Загрузка кода примера) и распакуйте его. Будет создана папка с примерами, содержащая файл build.xml. Скопируйте папку с примерами в домашнюю директорию Geronimo.
- Установите Apache Ant (см. Ресурсы для ссылки на web-сайт).
- Постройте пример приложения, поменяв директорию на директорию с примерами и напечатав
$ant. В результате произойдет компиляция и построение файла sample.jar а также копирование его в GERONIMO_HOME/repository/sample/jars.
У GERONIMO_HOME/sample/src/EchoServer.java есть реализация эхо сервера GBean. Код GBean показан в листинге 2.
Листинг 2. Код GBean эхо сервера
public class EchoServer implements GBeanLifecycle {
private static final GBeanInfo GBEAN_INFO;
private final String objectName;
private int port;
private ServerSocket serversocket;
private boolean started = false;
static {
GBeanInfoBuilder infoFactory =
new GBeanInfoBuilder(EchoServer.class.getName(), EchoServer.class);
// атрибуты
infoFactory.addAttribute("objectName", String.class, false);
infoFactory.addAttribute("port", int.class, true);
// действия
infoFactory.setConstructor(new String[] { "objectName", "port" });
GBEAN_INFO = infoFactory.getBeanInfo();
}
public EchoServer(String objectName, int port) {
this.objectName = objectName;
this.port = port;
}
public void doStart() throws WaitingException, Exception {
//код для запуска эхо сервера
}
public void doStop() throws WaitingException, Exception {
//код для остановки эхо сервера
}
.....
}
|
Листинг 3 показывает файл $GERONIMO_HOME/sample/echo-server.xml, который является планом для размещения эхо сервера внутри Geronimo
Листинг 3. План размещения эхо сервера
<?xml version="1.0" encoding="UTF-8"?>
<configuration
xmlns="http://geronimo.apache.org/xml/ns/deployment"
configId="deployment/echoserver"
>
<gbean name="geronimo.test:name=echoserver"
class="EchoServer" >
<attribute name="port" type="int">2345</attribute>
</gbean>
<dependency>
<uri>sample/jars/samples.jar</uri>
</dependency>
</configuration>
|
Обратите особое внимание на атрибут port и зависимость, которая объясняет, где можно найти классы для эхо сервера. Путь дается относительно директории репозитория домашней директории Geronimo. ID конфигурации однозначно определяет конфигурацию.
Перейдите в директорию $GERONIMO_HOME и запустите сервер Geronimo:
$ java -jar bin/server.jar |
В отдельной оболочке перейдите в директорию $GERONIMO_HOME и разместите эхо сервер:
$ java -jar bin/deployer.jar deploy samples/echo-server.xml |
После подсказки разместителя, введите system как имя пользователя и manager как пароль:
Username: system Password: manager Deployed deployment/echoserver |
В окно сервера будет выведена информация, что запущен GBean. Нижняя строка – оператор System.out.println() в эхо сервере GBean. Теперь эхо сервер запущен и работает. Для того, чтобы это провоерить возпользуйтесь клиентом сетевого теледоступа или контрольным примером, предоставленным загрузочным файлом.
Вы также можете попробовать следующие команды: остановить, запустить и удалить эхо сервер:
java -jar bin/deployer.jar stop deployment/echoserver java -jar bin/deployer.jar start deployment/echoserver java -jar bin/deployer.jar undeploy deployment/echoserver |
В каждом случае в окне сервера будет указано, что происходит, включая то, какие конфигурации начали или прекратили работу.
Вы узнали о модели размещения Geronimo, которая собирает множество разных открытых проектов под один "зонтик". Пользователям Geronimo не нужно знать все подробности, описанные в этой статье, но если вам любобытно взглянуть за занавес, вы приобретете более глубокое понимание понятий, лежащих в основе архитектуры Geronimo.
Научиться
- Оригинал статьи Understand Geronimo's deployment architecture.
- Подробно изучите GBeans, прочитав статью Срината Пепера "Geronimo GBean Architecture."
- На странице Apache Geronimo Wiki вы найдете свежую информацию по Geronimo и подробные инструкции, как скачать релиз M4.
- Узнайте последние новости на официальном сайте Apache Geronimo.
- Совершите экскурсию по Geronimo с автором Синг Ли: "Geronimo! Part 1: The J2EE 1.4 engine that could" (developerWorks, май 2005), "Geronimo! Part 2: Tame this J2EE 1.4 bronco" (developerWorks, май 2005).
- На сайте проекта Apache Geronimo вы найдете материалы для разработчиков Geronimo.
- Посетите зону открытого кода developerWorks, чтобы получить исчерпывающую информацию, советы, обновления проектов. Это поможет вам более эффективно использовать техонологию открытого кода совместно с продуктам IBM.
- Просмотрите все статьи Apache articles и бесплатные учебные пособия Apache tutorials доступные в области открытых проектов в developerWorks.
Получить продукты и технологии
- Скачайте информацию и документацию с сайте Apache Maven. Мавен является руководителем проекта по программному обеспечению и сопутствующих инструментов, которые автоматизируют развертывание приложений Geronimo.
- Известный инструмент, основанный на Java, - Apache Ant вы можете скачать с сайта проекта.
- Скачайте Gluecode Standard Edition - серверное приложение с открытым кодом, основанное на Apache Geronimo.
- Попробуйте внедритьпробные программы от IBM в ваш следующий проект с открым кодом. Возможно скачать или приобрести на DVD.
- Вы можете скачать дистрибутив Apache Geronimo с сайте Apache.
Обсудить
- Примите участие в обсуждении материала на форуме.
- Присоединяйтесь к команде Apache Geronimo, чтобы участвовать в дискуссиях на канале #geronimo IRC (необходим IRC клиент).

Сринат Пепера – разработчик Geronimo, опытный разработчик web-служб, J2EE и технологий обработки XML. Сринат принимает активное участие в проекте Apache Web Services как разработчик в проектах WS-FX, Enterprise Web Services (EWS), Axis и Axis 2. Он представляет Axis2 в Комитете Управления Проектом Apache Web Services (the Apache Web Services Project Management Committee). Вы можете написать Сринату на hemapani@gmail.com.