Опубликован: 18.03.2010 | Доступ: свободный | Студентов: 841 / 85 | Оценка: 4.48 / 4.33 | Длительность: 12:01:00
Лекция 3:

Технология Enterprise Java Beans. Часть 1

Создание проекта для компонента в Eclipse-WTP

Все готово, чтобы реализовать код в проекте Eclipse-WTP.Будут рассмотрены две реализации данного компонента - одна только при помощи технического средства Ant,встроенного в EcIipse-WTP,а другая - при помощи внутренних средств EcIipse-WTP,предназначенных для развертывания компонентов на различных контейнерах EJB.Начнем с создания проекта. Выберем закладку File->New->Project в главном меню.

Выбор типа проекта

Рис. 3.1. Выбор типа проекта

Eclipse-WTP позволяет создавать специальные типы проектов для EJB.Но для того, чтобы лучше понять сам процесс создания и развертывания компонент EJB,сделаем обычный Java- проект (Рис. 3.1).

Название проекта

Рис. 3.2. Название проекта

Зададим проекту название CorrectTime (Рис. 3.2).

Выбор каталога с исходными кодами

Рис. 3.3. Выбор каталога с исходными кодами

Создаем каталог ejbModuIe для исходных кодов EJB -компонента. Делается это при помощи опции Create new source folder (Рис. 3.3).

Создаем пакет для классов компонента CorrectTimeBean

Рис. 3.4. Создаем пакет для классов компонента CorrectTimeBean

После того, как создан каталог с исходным кодом, создается пакет для классов компонента. Делается это при помощи щелчка правой кнопкой мыши на папке с исходными кодами и выбора пункта меню New->Package (Рис. 3.4).

Выбор библиотек JBoss

увеличить изображение
Рис. 3.5. Выбор библиотек JBoss

После этого необходимо подключить необходимые библиотеки JBoss - jbossall-client.jar и jboss-j2ee.jar. Они находятся в подкаталоге client каталога, в который был установлен JBoss.Необходимые библиотеки можно добавить, войдя в закладку Project главного меню: Project -> Properties -> Java Build Path -> Add External Jars, и затем выбрав в появившейся форме необходимые библиотеки (Рис. 3.5).

Необходимые приготовления выполнены, теперь можно приступать непосредственно к написанию кода компонента и клиента.

Меню создания интерфейса

Рис. 3.6. Меню создания интерфейса

Вначале создаем удаленный интерфейс. Делается это правым щелчком мыши на соответствующем пакете и выборе New -> Interface. В появившемся меню (Рис. 3.6) можно выбрать имя интерфейса, а также те интерфейсы, от которых он наследуется (extends).В качестве альтернативы, можно явным образом задать наследуемые интерфейсы прямо в коде.

Удаленный интерфейс

увеличить изображение
Рис. 3.7. Удаленный интерфейс
Метод удаленного интерфейса

Рис. 3.8. Метод удаленного интерфейса

Теперь в созданном удаленном интерфейсе задаем единственный метод obtainCorrectTime() компонента CorrectTimeBean (Рис. 3.7, Рис. 3.8).

Домашний интерфейс (Home Interface)

Рис. 3.9. Домашний интерфейс (Home Interface)

Аналогичным образом создаем домашний интерфейс (Home Interface) (Рис. 3.9).

 Класс компонента

увеличить изображение
Рис. 3.10. Класс компонента

После этого создается непосредственно класс компонента (Рис. 3.10).

Создание файла дескриптора развертывания

Рис. 3.11. Создание файла дескриптора развертывания

Теперь необходимо задать дескриптор развертывания (Deployment descriptor).Для этого в каталоге META-INF каталога с исходными кодами создаем файл ejb-jar.xml - дескриптор развертывания компонента (Рис. 3.11).

Файл дескриптора компонента

увеличить изображение
Рис. 3.12. Файл дескриптора компонента

Дескриптор развертывания компонента создан (Рис. 3.12).Помимо этого файла в каталог META-INF следует положить файл MANIFEST.MF - для того, чтобы потом использовать его при создании JAR -архива с EJB -компонентом. Этот файл выглядит следующим образом:

Manifest-Version: 1.0

Class-Path:

Теперь займемся созданием кода клиента. Вначале создадим еще один каталог для исходных кодов клиента в корневом каталоге проекта. Назовем этот каталог client. Внутри него создадим пакет с названием correctTimeBeanClient,и в него уже поместим класс CorrectTimeClient. Клиентское приложение также будет упаковано в JAR -архив. Так что для него тоже нужно будет сделать файл MANIFEST.MF. Вот как он будет выглядеть:

Manifest-Version: 1.0

Main-class: correctTimeBeanClient.CorrectTimeClient

Class-path: CorrectTimeBean.jar jbossall-client.jar jboss-j2ee.jar

Main-class - это класс, который содержит в себе метод main(String args[]). В Class-path указываются библиотеки, которые необходимо подключить. Помимо jboss-client.jar и jboss-j2ee.jar,туда добавлен архив и с самим компонентом - это сделано для того, чтобы клиент смог использовать удаленные интерфейсы компонента. Можно было бы, конечно, поместить классы удаленных интерфейсов в отдельный архив, или добавить их непосредственно в архив к клиенту, но в этом примере для простоты было сделано так.

Класс клиента

увеличить изображение
Рис. 3.13. Класс клиента

Теперь займемся написанием ANT -скрипта для сборки компонента, клиента, и размещению компонента на контейнере JBossEclipse-WTP есть встроенная поддержка ANT. Создаем в корневом каталоге проекта два файла - build.xml и build.properties. Файл buildproperties выглядит следующим образом:

# Отключает часть логов Ant
verbose=no

# Компилятор не будет добавлять debug-информацию в классы 
compile.debug=off

# Путь до jboss
jboss.server.home=C:\\ejb\\jboss\\server\\default

А вот так выглядит файл build.xml:

<?xml version="1.0"?>
<project name="CorrectTimeEJB" default="all" basedir="."> 
<property name="app" value="${basedir}"/>

<property name="bean.src" value="${app}/ejbModule"/> 
<property name="client.src" value="${app}/client"/>

<property name="bean.lib" value="${app}/lib"/> 
<property name="client.lib" value="${app}/lib"/>

<property name="bean.config" value="${bean.src}/META-INF"/> 
<property name="bean.name"value="CorrectTimeBean"/>

<property name="client.name" value="CorrectTimeClient"/> 
<property name="client.deploy.dir" value="client-deploy"/>

<property name="build" value="build"/>
<property name="build.classesdir" value="${build}/classes"/>
<property name="build.client.classesdir" value="${build}/classes-client"/>
<property name="assemble" value="${basedir}/assembled"/>
<property name="assemble-client" value="${basedir}/assembled-client"/>

<target name="init">
<property file="${basedir}/build.properties"/>
<path id="build.classpath">
<pathelement path="${build.classesdir}"/>
<fileset dir="${bean.lib}" includes="*.jar"/>
</path>

<path id="build.client.classpath"> 
<pathelement path="${build.classesdir}"/> 
<pathelement path="${build.client.classesdir}"/> 
<fileset dir="${client.lib}" includes="*.jar"/>
</path> 
</target>

<target name="compile" depends="init">
<echo message="Compiling sources."/> 
<delete dir="${build.classesdir}"/> 
<mkdir dir="${build.classesdir}"/>

<delete dir="${build.client.classesdir}"/> 
<mkdir dir="${build.client.classesdir}"/>

<!--Compiling the java bean classes-->

<javac srcdir="${bean.src}"
destdir="${build.classesdir}" 
verbose="${verbose}" 
debug = "${compile.debug}" 
deprecation="yes">
<classpath refid="build.classpath"/>
</javac>


<!--Compiling the client classes--> <javac srcdir="${client.src}"

destdir="${build.client.classesdir}" 
verbose="${verbose}" 
debug = "${compile.debug}" deprecation="yes">
<classpath refid="build.client.classpath"/>
</javac>
</target>

<target name="ejbjar" depends="compile">

<echo message="Assembling JBoss ${bean.name} module." />

<delete dir="${assemble}"/> <mkdir dir="${assemble}"/>

<jar destfile="${assemble}/${bean.name}.jar"> 
<!-- classes -- >
<fileset dir="${build.classesdir}"> 
<include name="**/*.class" /> </fileset>

<!-- Descriptors -->
<metainf dir="${bean.config}" includes="ejb-jar.xml"/>
</jar>
</target>

<target name="clientjar" depends="compile">

<echo message="Assembling JBoss ${bean.name} module." />

<delete dir="${assemble-client}"/> <mkdir dir="${assemble-client}"/>

<jar manifest="${client.src}/MANIFEST.MF"
destfile="${assemble-client}/${client.name}.jar"> <!-- classes -- >
<fileset dir="${build.client.classesdir}">
<include name="**/*.class" /> 
</fileset>
</jar>

</target>

<target name="ejbdeploy" depends="ejbjar">
<echo message="Deploying ${bean.name} package to JBoss." /> 
<copy file="${assemble}/${bean.name}.jar"
todir="${jboss.server.home}/deploy" />
</target>

<target name="clientdeploy" depends="clientjar, ejbjar"> 	
<delete dir="${client.deploy.dir}"/> 
<mkdir dir="${client.deploy.dir}"/>

<echo message="Deploying ${client.name}  package"/>

<copy file="${assemble-client}/${client.name}.jar"
todir="${client.deploy.dir}" /> 
<copy file="${assemble}/${bean.name}.jar"
todir="${client.deploy.dir}"/> 
<copy todir="${client.deploy.dir}">
<fileset dir="${client.lib}"/>
</copy> 
</target>

<target name="all" depends="clientdeploy,   ejbdeploy">
<echo message="Building project CorrectTime..."/>
</target>
</project>

Скрипт build.xml под управлением ANT сначала компилирует файлы компонента и клиента в два разных каталога. После этого, используя XML -дескриптор и файлы MANIFEST.MF,создает два JAR -архива - один архив компонента, а другой - архив клиента. Архив клиента он помещает в каталог развертывания клиента client-deploy (то есть тот каталог, в котором размещается JAR-архив клиентского приложения вместе с библиотеками и архивом компонента). Архив компонента помещается в каталог C:\ejb\jboss\server\default\deploy. На этом развертывание компонентов и клиента можно считать завершенным.

Запуск АNT-скрипта

Рис. 3.14. Запуск АNT-скрипта

Запустить скрипт из Eclipse-WTP на исполнение, можно, открыв файл build.xml, а затем щелкнув правой кнопкой на имени проекта справа и выборе пункта Run As->Ant Build (Рис. 3.14).

Результат работы АNT-скрипта

Рис. 3.15. Результат работы АNT-скрипта

Если все прошло успешно, то в нижней части экрана должно появиться соответствующее сообщение (Рис. 3.15).

Теперь можно запустить контейнер приложений JBoss.Стоит написать bat -файл для запуска JBoss,в котором будут выставляться значения переменных PATH и JAVAHOME,соответствующие JDK 1.4 или JDK 1.5.Это следует сделать из-за того, что БД Oracle также устанавливает свою версию JDK и прописывает все пути по умолчанию к своей версии JDK. А с этой версией JDK JBoss работать не будет.

set PATH=C:\Program Files\Java\jdk1.5.0_02\bin\
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_02
run

Запускаем JBoss посредством bat-файла из каталога bin.

Компонент развернут

увеличить изображение
Рис. 3.16. Компонент развернут

Если развертывание прошло успешно, то в конце загрузки появится название компонента и его JNDI -имя (Рис. 3.16).

Теперь запускаем клиентское приложение. Для него тоже стоит создать bat -файл для запуска.

set PATH=C:\Program Files\Java\jdk1.5.0_02\bin\
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_02
java -jar CorrectTimeClient.jar
Точное время

Рис. 3.17. Точное время

Если все было сделано правильно, но на экране появится точное время, полученное от компоненты с контейнера JBoss (Рис. 3.17).

Антон Зубеков
Антон Зубеков

Здравствуйте, подскажите пожалуйста где можно достать материалы по курсу Кросс-платформенные и многозвенные технологии, о которых говориться, к примеру, в Лекции 2. Пример "Служба мгновенных сообщений"