Создание пакета
и развертывание объектов
Создание jar-файла для EJB включает создание архива содержащего EJB-классы
и дескрипторы развертывания. Для создания jar-файла для нашего примера, просто
зайдите в директорию examples/build и выполните следующую команду:
bash-2.04$ ant intro-interest-jar
Buildfile: build.xml
validate:
fail_if_not_valid:
init:
[echo] Using JBoss directory=/tmp/JBoss-2.2.2
[echo] Using classpath=/tmp/JBoss-2.2.2/client/ejb.jar:/tmp/JBoss-2.2.2/client/jaas.jar:/tmp/JBoss-2.2.2/client/jbosssx-client.jar:/tmp/JBoss-2.2.2/client/jboss-client.jar:/tmp/JBoss-2.2.2/client/jnp-client.jar:/tmp/tomcat/lib/servlet.jar:/tmp/examples/${build.classes.dir}
[echo] Using Source directory=/tmp/examples
[echo] Using Build directory=/tmp/examples/build-examples
intro-interest-jar:
compile:
[javac] Compiling 4 source files to /tmp/examples/build-examples/interest/classes
ejb-jar:
[mkdir] Created dir: /tmp/examples/build-examples/interest/META-INF
[copy] Copying 1 file to /tmp/examples/build-examples/interest/META-INF
[copy] Copying 1 file to /tmp/examples/build-examples/interest/META-INF
[jar] Building jar: /tmp/examples/build-examples/interest/interest.jar
BUILD SUCCESSFUL
Total time: 2 seconds
Эта команда скомпилировала EJB-классы и создала jar-файл для развертывания.
Если вы получили java.lang.NoClassDefFoundError вместо сообщения об успешном
создании jar-файла, тогда попробуйте проверить ваш classpath. Содержимое файла
interest.jar включает структуру, которую мы обсудили ранее. Ее содержимое
можно увидеть, запустив команду jar -tvf:
bash-2.04$ jar -tvf /tmp/examples/build-examples/interest/interest.jar
0 Sun Jun 24 22:55:52 PDT 2001 META-INF/
46 Sun Jun 24 22:55:52 PDT 2001 META-INF/MANIFEST.MF
0 Sun Jun 24 22:55:52 PDT 2001 org/
0 Sun Jun 24 22:55:52 PDT 2001 org/jboss/
0 Sun Jun 24 22:55:52 PDT 2001 org/jboss/docs/
0 Sun Jun 24 22:55:52 PDT 2001 org/jboss/docs/interest/
246 Sun Jun 24 22:55:52 PDT 2001 org/jboss/docs/interest/Interest.class
1177 Sun Jun 24 22:55:52 PDT 2001 org/jboss/docs/interest/InterestBean.class
296 Sun Jun 24 22:55:52 PDT 2001 org/jboss/docs/interest/InterestHome.class
599 Sun Jun 24 22:55:52 PDT 2001 META-INF/ejb-jar.xml
220 Sun Jun 24 22:55:52 PDT 2001 META-INF/jboss.xml
Всё, что нам нужно для того чтобы установить наш объект на сервере - это просто
скопировать файл interest.jar в директорию JBOSS_DIST/deploy. Вы можете делать
это столько раз сколько хотите. Сервер определяет, что файл изменён и автоматически
его переустанавливает. Запустите сервер JBoss, и установите jar-файл с помощью
команды ant intro-interest-deploy, запущенной в директории examples/build.
Во время установки вы увидите сообщения в консоли похожие на следующие:
[Auto deploy] Auto deploy of file:/tmp/JBoss-2.2.2/deploy/interest.jar
[J2EE Deployer Default] Deploy J2EE application: file:/tmp/JBoss-2.2.2/deploy/interest.jar
[J2EE Deployer Default] Create application interest.jar
[J2EE Deployer Default] install module interest.jar
[Container factory] Deploying:file:/tmp/JBoss-2.2.2/tmp/deploy/Default/interest.jar
[Verifier] Verifying file:/tmp/JBoss-2.2.2/tmp/deploy/Default/interest.jar/ejb1001.jar
[Container factory] Deploying Interest
[Container factory] Deployed application: file:/tmp/JBoss-2.2.2/tmp/deploy/Default/interest.jar
[J2EE Deployer Default] J2EE application: file:/tmp/JBoss-2.2.2/deploy/interest.jar is deployed.
Если вы увидите сообщения вроде этого:
[Auto deploy] Auto deploy of file:/tmp/JBoss-2.2.2/deploy/interest.jar
[J2EE Deployer Default] Deploy J2EE application: file:/tmp/JBoss-2.2.2/deploy/interest.jar
...
[Auto deploy] Deployment failed:file:/tmp/JBoss-2.2.2/deploy/interest.jar
тогда это значит, что EJB-объекты не были установлены - сервер всегда сообщает
об EJB-объектах, которые он обнаружил. Обычно это значит что дескриптор развертывания
ejb-jar.xml плохо структурирован или отсутствует, или находится не в той директории.
Теперь у вас есть развернутый на сервере EJB-объект Interest. Дальше мы создадим
простого тестового клиента, который запустит один из методов этого объекта,
просто чтобы проверить что он работает.