Главная » Java, JavaBeans » Начало. Изучение примеров EJB

0

Контейнер EJB поставляется с наборов примеров, которые иллюстрируют использование большинства из предоставляемых возможностей. Перед использованием примеров их необхолдимо построить.

Обзор примеров

В комплект поставки входят следующие примеры:

•                 sort – stateless Session-компонент, который реализует алгоритм "сортировки слиянием". Пример демонстрирует, каким образом нужно откомпилировать текст и запустить Компонент в Контейнере. Пример также демонстрирует работу с RMI-IIOP и взаимодействие со службой имен JNDI.

•                 cart – stateful Session-компонент, который реализует магазинный чек. Этот пример демонстрирует управление транзакциями с помощью Дескриптора Поставки. Этот пример также показывает, что Inprise EJB-Контейнер обеспечивает обратную совместимость с форматом дескриптора EJB 1.0. Для преобразования Дескриптора EJB 1.0 в XML- формат EJB 1.1 используется утилита dd2xml.

•          pigs – два Entity-компонента с CMP, которые связаны друг с другом соотношениями один-к-одному и один-ко-многим. Используются два типа компонентов – Container и Contained. Containers могут содержать любое число Contained-компонентов. Каждый Contained- компонент может содержаться не более чем в одном Container’e.

•          bank – Entity-компоненты и один stateless Session-компонент. Entity- компоненты реализуют интерфейс "счет в банке"; один из них использует СМР, другой – BMP. Session-компонент представляет собой банковского оператора, который позволяет клиенту переводить средства с одного счета на другой.

•          data – Это пример с использованием Entity-компонента, который показывает все типы данных, поддерживаемых службой СМР. В примере используется компонент, который содержит по одному полю каждого из поддерживаемых СМР типов. Каждая операция выполняется в контексте отдельной транзакции; содержание операции состоит в чтении значения поля, записи в него нового значения с последующим чтением и проверкой корректности выполненного изменения данных. Для демонстрации всех возможностей, установите флаг EJBDebug и отслеживайте изменения в состоянии базы данных. Обратите внимание, что транзакция в режиме "только чтение" не изменяет данные, а другие транзакции вносят только минимально необходимые изменения; в нашем примере происходит изменение значения только одного поля при выполнении каждой операции.

•          custom_cmp – Пример с использованием СМР Entity-компонента, который иллюстрирует использование CORBA-сервера для выполнения сохранения состояния компонента. В этом примере Дескриптор Поставки используется для организации взаимодействия со специальной реализацией СМР Службы Сохранения Состояния EJB-Контейнера. Идея состоит в том, что этот новый Менеджер СМР передает вызовы некоторому CORBA-объекту, который рассматривается как транзакционное хранилище данных для данных Компонента EJB.

Инфо Советуем начать с примеров sort и cart. Их проще построить и

запустить, и они не требуют наличия внешних баз данных.

Инфо Мы постоянно добавляем новые примеры и улучшаем существующие.

Самая свежая информация находится в файле …\examples\index.html.

Построение примеров

Для того, чтобы построить примеры, необходимо выполнить два простых шага:

1 Установить значения переменных среды. О том, как это сделать, см. Inprise Application Server Installation Guide.

• CLASSPATH – Пользователи как Windows, так и Solaris

устанавливают значение этой переменной как "." (точка). Все

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

• PATH – пользователи Solaris должны указать путь к утилите vbj.

2 Постройте примеры – при работе с Solaris, перейдите в каталог …/ examples и наберите make. В случае Windows NT, наберите make_all.bat.

Makefile

Makefile автоматически компилирует код java, запускает компилятор java2iiop для нужных интерфейсов, генерирует jar-файл и проверяет его.

Ниже приведено описание того, что выполняется для примера sort:

1       Запускается vbjc и компилируется Java-код.

2         Запускается компилятор java2iiop для интерфейса SortHome. Компилятор генерирует стабы и скелеты CORBA (RMI-IIOP) для указанного интерфейса. Несмотря на то, что интерфейс Sort не был указан явно, указания SortHome достаточно для того, чтобы в результате анализа зависимостей SortHome были найдены все необходимые классы и сгенерирован весь требуемый код.

3         Запускается vbjc и компилируются два класса – SortHomePOAInvokeHandler и SortPOAInvokeHandler – вместе со всеми классамм, от которых они зависят.

4         Запускается стандартная утилита JDK jar для генерации ejb-jar-файла, необходимого для установки в Контейнер.

5         Запускается утилита VERIFY, входящая в состав Контейнера EJB, для проверки корректности ejb-jar-файла.

ejb-jar-файл содержит следующее:

•                 XML-Файл (или файлы) Дескрипторов Поставки.

•          Файлы классов в виде байт-кода. В файл помещаются все файлы с расширением .class.

Для просмотра содержимого файла вы можете использовать стандартную утилиту jar:

jar tvf beans.jar

Более подробная информация о поставке (deployment) находится в Главе 9, "Поставка Enterprise JavaBeans".

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

Запуск примеров

Для запуска программ:

1         Запустите VisiBroker Smart Agent. Это необходимо для выполнения некоторых начальных действий, например, установки взаимодействия клиента со службой имен. Smart Agent входит в комплект поставки Application Server. Для его запуска в консольном режиме из Windows, наберите

WinNT  prompt% osagent -С

При работе с UNIX, запуск VisiBroker Smart Agent’а в консольном режиме выполняется так:

UNIX   UNIX % osagent &

2         Убедитесь, что вы находитесь в каталоге, где расположен пример, который вы хотите запустить. Например, для запуска программы sort вы должны находиться в каталоге …\examples\sort.

3         Запустите Сервер EJB с помощью следующей команды (для запуска примера pigs):

prompt% vbj com.inprise.ejb.Container ejbcontainer pigs beans.jar -jts -jns -jdb -jss

Флаги (-jts -jns -jdb) указывают на необходимость запуска соответствующих сервисов. Флаг -jdb запускает поставляемую с Контейнером Базу Данных, если в примере используются Entity- компоненты. Используйте флаг -jss для примеров с stateful Session- компонентами.

Пример bank требует обращения к внешней базе данных. Запустите Сервер для выполнения этого примера с помощью следующей команды:

prompt% vbj Djdbc.drivers=oracle.jdbc.driver.OracleDriver com.inprise.ejb.Container \

ejbcontainer bank beans.jar -jts -jns Обратитесь к файлу README в соответствующем каталоге для подробных объяснений, каким образом построить и запустить этот пример.

Примеры data и custom_cmp требуют, чтобы сервер назывался "ejbcontainer". Не меняйте этого названия без внесения соответствующих исправлений в параметр JDBC URL в Дескрипторе Поставки.

Ниже приведен список флагов, используемых для каждого примера:

Таблица 3.1 Флаги EJB-Сервера для примеров программ

Пример

Требуемые флаги

sort

-jns

cart

-jns -jts -jss

bank

-jns -its

pigs

-jns -its -jdb

data

-jns -its -jdb

custom cmp

-jns -its

4         Подождите, пока Контейнер не запустится (появится следующее сообщение):

Container [ejbcontainer] is ready.

5         Откройте другое окно и запустите программу-клиента. К каждому примеру поставляется своя клиентская программа. Например, для примера sort клиент может быть запущен так:

prompts vbj SortClient

Режим отладки

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

Для запуска Контейнера/Сервера с включенным режимом отладки, наберите команду

prompts vbj -DEJBDebug com.inprise.ejb.Container ejbcontainer

sort_beans.jar -jns

Для запуска клиента с включенным режимом отладки, наберите

prompts vbj -DEJBDebug SortClient

Исключение NotFound

Если при запуске клиента вы получили сообщение об исключении NotFound, проверьте следующее:

•          Запущен ли Smart Agent?

•          Запущен ли Контейнер?

•          Запущен ли Контейнер в том же каталоге, где и клиент?

•          Используется ли при запуске OSAgent, Контейнера и Клиента одно и то же значение переменной OSAGENT_PORT?

•          Правильно ли заданы командные строки?

Источник: Руководство программиста Enterprise JavaBeans

По теме:

  • Комментарии