Про то как создать и развернуть на сервере приложений JBoss простой message driven bean используя аннотации спецификации EJB3. Страница 2

Создадим второй файл build.properties. Вот его содержимое:

 # src directory
 src.dir=src
 
 # target compilation directory
 classes.dir=deploy
 
 #deployment folder of the application server
 deploy.dir=C:/jboss/server/default/deploy
 file created as target for java doc
 api=javadoc
 location of the jboss EJB 3 libraries
 project.libs=libs
 
 #location of compiled classes
 build.dir=bin

Это файл настроек. Здесь Вы должны подставить свои значения путей и названий папок. Можно пропустить создание этого файла, но не поленитесь, и тогда в дальнейшем Вам не потребуется каждый раз, при изменении путей и переносе приложения, копаться во всех сборочных файлах. Это только в нашем простом примере один несложный Ant скрип. В реальной жизни все может быть намного сложнее.

Третий и последний файл это как раз Ant скрипт для сборки и развертывания примера на сервере.

 <?xml version="1.0" encoding="ISO-8859-1"?>
 <project name="MDBTest" basedir="." default="deploy">

  <property file="build.properties" />
  
  <path id="base.path">
   <fileset dir="${project.libs}">
    <include name="**/*.jar" />
   </fileset>
  </path>

  <target name="clean" description="Delete all generated files">
   <delete dir="${classes.dir}" />
  </target>

  <target name="compile" description="Compiles the Task">
   <mkdir dir="${classes.dir}" />
   <javac srcdir="${src.dir}" destdir="${classes.dir}">
   <classpath>
    <path refid="base.path" />
   </classpath>
   </javac>
  </target>

  <target name="deploy" description="JARs the Task" depends="undeploy, clean, compile">
   <jar destfile="${deploy.dir}/${ant.project.name}.jar">
    <fileset dir="${classes.dir}">
    </fileset>
   </jar>
  </target>

  <target name="undeploy" description="Undeploy jar from server">
   <delete file="${deploy.dir}/${ant.project.name}.jar" />
  </target>

 </project>

Код совсем простой. Каждый без труда сможет понять как что делает этот скрипт.

Мы создаем обычный jar файл ибо пока нет необходимости усложнять задачу.

Запустите сервер приложений JBoss и разверните наш бин. Сервер сразу же должен показать, что он обнаружил наше приложение и готов с ним работать.

13:15:40,406 INFO  [JmxKernelAbstraction] creating wrapper delegate for: org.jboss.ejb3.mdb.MDB
13:15:40,406 INFO  [JmxKernelAbstraction] installing MBean: jboss.j2ee:jar=MDBTest.jar,name=SimpleMessageBean,service=EJB3 with dependencies:
13:15:40,421 INFO  [EJBContainer] STARTED EJB: mdbtest.SimpleMessageBean ejbName: SimpleMessageBean
13:15:40,437 INFO  [EJB3Deployer] Deployed: file:/C:/jboss/server/default/deploy/MDBTest.jar

Все. Бин успешно инсталлирован на сервер и готов к работе. Осталось это проверить. Самый простой способ это создать консольное приложение – клиент для нашего сервера. SimpleMessageClient.

 package mdbtest;

 import java.util.Properties;
 import javax.jms.*;
 import javax.naming.Context;
 import javax.naming.InitialContext;

 public class SimpleMessageClient {
  public static void main(String[] args) {
   Context context;
   Properties properties = new Properties();
   properties.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
   properties.put("java.naming.factory.url.pkgs", "=org.jboss.naming:org.jnp.interfaces");
   properties.put("java.naming.provider.url", "localhost:1099");
   try {
    context = new InitialContext(properties);
    Queue queue = (Queue) context.lookup("queue/mdbAlexTest");
    QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup("ConnectionFactory");
    QueueConnection cnn = factory.createQueueConnection();
    QueueSession sess = cnn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
    TextMessage msg = sess.createTextMessage("My Message");
    long sent = System.currentTimeMillis();
    msg.setLongProperty("sent", sent);
    QueueSender sender = sess.createSender(queue);
    for (int i = 0; i < 12; i++) {
     msg.setText("This is " + (i + 1) + " message to SimpleMessageBean");
     System.out.println("Sending message: " + msg.getText());
     sender.send(msg);
    }
    sess.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 }

Итак мы помним что наш бин создает очередь queue/mdbMyTest и будет слушать все что туда передадут. Соответственно наш клиент пытается подключиться именно к этой очереди и передать в нее сообщения. Нам не надо больше ничего делать. Просто запустите этот файл в eclipse и наблюдайте за консолями клиента и сервера.
Вот что мы получили в итоге:

Вывод консоли клиента:

Sending message: This is 1 message to SimpleMessageBean
Sending message: This is 2 message to SimpleMessageBean
Sending message: This is 3 message to SimpleMessageBean
Sending message: This is 4 message to SimpleMessageBean
Sending message: This is 5 message to SimpleMessageBean
Sending message: This is 6 message to SimpleMessageBean
Sending message: This is 7 message to SimpleMessageBean
Sending message: This is 8 message to SimpleMessageBean
Sending message: This is 9 message to SimpleMessageBean
Sending message: This is 10 message to SimpleMessageBean
Sending message: This is 11 message to SimpleMessageBean
Sending message: This is 12 message to SimpleMessageBean

Отклик сервера:

13:30:18,250 INFO  [STDOUT] MESSAGE BEAN: Message received: This is 1 message to SimpleMessageBean
13:30:18,265 INFO  [STDOUT] MESSAGE BEAN: Message received: This is 4 message to SimpleMessageBean
13:30:18,265 INFO  [STDOUT] MESSAGE BEAN: Message received: This is 9 message to SimpleMessageBean
13:30:18,265 INFO  [STDOUT] MESSAGE BEAN: Message received: This is 6 message to SimpleMessageBean
13:30:18,265 INFO  [STDOUT] MESSAGE BEAN: Message received: This is 10 message to SimpleMessageBean
13:30:18,265 INFO  [STDOUT] MESSAGE BEAN: Message received: This is 11 message to SimpleMessageBean
13:30:18,265 INFO  [STDOUT] MESSAGE BEAN: Message received: This is 7 message to SimpleMessageBean
13:30:18,265 INFO  [STDOUT] MESSAGE BEAN: Message received: This is 2 message to SimpleMessageBean
13:30:18,265 INFO  [STDOUT] MESSAGE BEAN: Message received: This is 8 message to SimpleMessageBean
13:30:18,265 INFO  [STDOUT] MESSAGE BEAN: Message received: This is 12 message to SimpleMessageBean
13:30:18,265 INFO  [STDOUT] MESSAGE BEAN: Message received: This is 3 message to SimpleMessageBean
13:30:18,265 INFO  [STDOUT] MESSAGE BEAN: Message received: This is 5 message to SimpleMessageBean

Очевидно что все посланные сообщения благополучно добрались до адресата.

Страница: