Создание пакета и развертывание объектов

Создание 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. Дальше мы создадим простого тестового клиента, который запустит один из методов этого объекта, просто чтобы проверить что он работает.

Наши друзья