Глава 12. Примеры третьих лиц

Содержание

Запуск примеров из Enterprise JavaBeans, от Ричарда Монсона-Хефеля (Unix)
Развертывание Pet Store 1.1.2 Demo в JBoss
Развертывание Cocoon 2 в JBoss
Использование SSL с JBoss

Перевод: Woodoo

Запуск примеров из Enterprise JavaBeans, от Ричарда Монсон-Хефеля (Richard Monson-Haefel) (Unix)

Автор:Себастьян Алборини (Sebastien Alborini) <sebastien.alborini@m4x.org>

На этой странице описывается как запускать примеры из книги Ричарда Монсона-Хефеля "Применение JavaBean" (Enterprise JavaBeans), 2ое издание (Глава 4) в JBoss.

Вы можете загрузить примеры (zip файл) с сайта O'Reilly. Предположительно, Вы распаковали этот файл и работаете в директории chapter4/EJB11.

Эти примеры следует немного исправить для запуска с JBoss. Вы можете загрузить измененные версии здесь, но я рекомендую проследовать этим инструкциям, которые рассказывают точно, что должно быть исправлено.

  • Установка Вашего окружения.

    Библиотеки JBoss нужно будет скомпилировать и запустить примеры, так у Вас установится переменная окружения JBOSS_HOME в Вашей установке JBoss. Например:

    • экспорт JBOSS_HOME=$HOME/jboss_pr4 если у Вас бинарная версия в домашней директории

    • экспорт JBOSS_HOME=$HOME/jboss/dist если у Вас версия, скачаная с CVS.

  • Скомпилируйте и разверните бины (beans).

    Бины почти подходят для JBoss, разница присутствует только в CabinBean от TravelAgentBean: бин должен рассматриваться в пространстве имен java:comp/env. Отредактируйте com/titan/travelagent/TravelAgentBean.java, и замените

         Object obj = jndiContext.lookup("ejb/CabinHome");
    на
         Object obj = jndiContext.lookup("java:comp/env/ejb/CabinHome"); 
    Это ejb-ссылка от TravelAgentBean (в travelagent.jar) в CabinBean (в cabin.jar), находящемся в другом приложении (другой ejb-jar файл). В случае внешней ссылки Вы должны предоставить полное jndi-имя CabinBean в jboss.xml для TravelAgentBean: создайте и отредактируйте файл com/titan/travelagent/jboss.xml
         <?xml version="1.0"?>                                                 
         <jboss>
           <enterprise-beans>
             <session>
               <ejb-name>TravelAgentBean</ejb-name>
               <ejb-ref>
                 <ejb-ref-name>ejb/CabinHome</ejb-ref-name>
                 <jndi-name>CabinBean</jndi-name>
               </ejb-ref>
             </session>
           </enterprise-beans>
         </jboss>
         

    В ejb-jar.xml ничего изменять не надо. Теперь Вы можете использовать скрипт jbossMakeIt.sh чтобы скомпилировать и развернуть:

     


    #!/bin/sh
    # make cabin bean
    javac -classpath $JBOSS_HOME/lib/ext/ejb.jar:. \
    com/titan/cabin/Cabin*.java

    cp com/titan/cabin/ejb-jar.xml META-INF/ejb-jar.xml
    jar cvf cabin.jar com/titan/cabin/Cabin*.class META-INF/ejb-jar.xml

    # make travelagent bean
    javac -classpath $JBOSS_HOME/lib/ext/ejb.jar:. \
      com/titan/travelagent/TravelAgent*.java

    cp com/titan/travelagent/ejb-jar.xml \
       com/titan/travelagent/jboss.xml \
       META-INF/

    # JBoss needs the Home, Remote and primary key (PK) classes
    # of the Cabin in travelagent.jar so that TravelAgent*.class
    # can access the Cabin bean
    jar cvf travelagent.jar \
      com/titan/cabin/CabinHome.class \
      com/titan/cabin/Cabin.class \
      com/titan/cabin/CabinPK.class \
      com/titan/travelagent/TravelAgent*.class \
      META-INF/ejb-jar.xml META-INF/jboss.xml

    rm -f META-INF/ejb-jar.xml
    rm -f META-INF/jboss.xml

    # deploy
    cp cabin.jar travelagent.jar $JBOSS_HOME/deploy

  • Компиляция клиентов.

    Клиенты из примеров используют такие же ссылки на имена java:comp/env, которые не поддерживаются JBoss для клиентов. Вы должны изменить следующее: (CabinBean это имя jndi под которым развернется Cabin Bean, смотрите jndi) в com/titan/cabin/Client_1.java заменить:

     
         Object obj = jndiContext.lookup("java:comp/env/ejb/CabinHome");
    этим:
          Object obj = jndiContext.lookup("CabinBean");
    в com/titan/cabin/Client_2.java replace
         Object obj = jndiContext.lookup("ejb/CabinHome");
    этим:
          Object obj = jndiContext.lookup("CabinBean");
    в com/titan/travelagent/Client_1.java заменить:
          Object obj = jndiContext.lookup("ejb/TravelAgentHome");
    этим
          Object obj = jndiContext.lookup("TravelAgentBean");
    Теперь Вы можете использовать jBossMakeClients.sh для компиляции:

    #!/bin/sh

    javac -classpath $JBOSS_HOME/lib/ext/ejb.jar:.  \
        com/titan/cabin/Client*.java           \
        com/titan/travelagent/Client*.java


  • Запуск клиентов

    Мы не используем инструмент запуска RI от Sun, так RunIt.sh не хочет работать. Вместо этого, мы создаем следующий скрипт: jBossRunClient.sh. Этот файл включает все библиотеки jBoss, которые нужны в классах.


    #!/bin/sh

    CP=$JBOSS_HOME/client/ejb.jar
    CP=$CP:$JBOSS_HOME/client/jndi.jar
    CP=$CP:$JBOSS_HOME/client/jta-spec1_0_1.jar
    CP=$CP:$JBOSS_HOME/client/jboss-client.jar
    CP=$CP:$JBOSS_HOME/client/jnp-client.jar

    CP=$CP:.

    java -cp $CP $1

    Так же у Вас установлены свойства jndi для соединения с сервером. Это делается в файле jndi.properties (этот файл должен быть в похожей директории как jBossRunClient.sh)
                                                                           
         java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
         java.naming.provider.url=localhost
         java.naming.factory.url.pkgs=org.jboss.naming;
         
    Теперь Вы можете запускать клиентов. Скрипт принимает имена клиентов в качестве аргумента, попробуйте:
     

    ./jBossRunClient.sh com.titan.cabin.Client_1
    ./jBossRunClient.sh com.titan.cabin.Client_2
    ./jBossRunClient.sh com.titan.travelagent.Client_1

    ЗАМЕЧАНИЕ: когда клиенты будут запущены, после запуска метода EJBHome.create(), появится DuplicateKeyException. я рекомендую Вам отключить лог отладки для этих примеров. Отредактируйте $JBOSS_HOME/conf/jboss.conf, в разделе ConsoleLogging, установите первый аргумент (ARG) в "Error".

Наши друзья