Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


MDB - это просто

Поиск:
Message Driven Beans на jBoss

1. Задача: создать Message Driven Bean (MDB) на jBoss и протестировать его.

2. Я пользовался самой последней версией jBoss и SDK 1.4.

3. Запускаем jBoss.
Прежде всего нужно зайти в ${JBOSSHOME}/ Server/default/deploy/jms, и в файле jbossmq-destinations-service.xml в самом первом mbean исправить строку
Код

<role name="publisher" read="true" write="true" create="false"/>

на
Код

<role name="publisher" read="true" write="true" create="true"/>

Далее запускаем run.**.

4. Пишем MDB.
Структура директории такая:
Код

..
 META-INF/
            jboss.xml
            ejb-jar.xml
 example/
            MDB.java
 MDBClient.java


5. MDB.java
Код

package example;

import javax.ejb.*;
import javax.jms.*;

public class MDB implements MessageDrivenBean, MessageListener
{
   protected MessageDrivenContext ctx;
   
   public void setMessageDrivenContext(MessageDrivenContext c)
   {
       this.ctx = c;
   }
   
   public void ejbCreate()
   { }
   
   public void onMessage(Message msg)
   {
       if (msg instanceof TextMessage)
       {
           TextMessage tm = (TextMessage) msg;
           try
           {
               String text = tm.getText();
               System.out.println("[RECEIVED MESSAGE] " + text);
           }
           catch (Exception e)
           {
               e.printStackTrace();
           }
       }
   }
   
   public void ejbRemove()
   { }
}

Он предельно прост. Методу onMessage передается TextMessage, из которого извлекается текст и печатается в консоль сервера.

6. ejb-jar.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee" version="2.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/nsj2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">

<display-name>MDB</display-name>
<enterprise-beans>
   <message-driven>
       <ejb-name>MDB</ejb-name>
       <ejb-class>examples.MDB</ejb-class>
       <messaging-type>javax.jms.MessageListener</messaging-type>
       <transaction-type>Container</transaction-type>
       <message-destination-type>javax.jms.Topic</message-destination-type>
       <activation-config>
               <activation-config-property>
                       <activation-config-property-name>
                               destinationType
                       </activation-config-property-name>
                       <activation-config-property-value>
                               javax.jms.Topic
                       </activation-config-property-value>
                   </activation-config-property>
       </activation-config>
   </message-driven>        
</enterprise-beans>
</ejb-jar>

Как видим, бин подписан на топик.

7. jboss.xml
Код

<jboss>
   <enterprise-beans>
       <message-driven>
           <ejb-name>MDB</ejb-name>
           <destination-jndi-name>topic/testTopic</destination-jndi-name>
       </message-driven>
   </enterprise-beans>
</jboss>

jboss.xml - специфический для провайдера (jBoss) файл, который указывает на топик, на который подписан наш бин. Это тестовый топик, см. jbossmq-destinations-service.xml.

8. Компилим, предварительно установив CLASSPATH (на винде нужен SET):
export CLASSPATH=:.:/jboss/client/jboss-j2ee.jar:/jboss/client/jbossall-client.jar

Пакуем бин:
jar cf MessageBean.jar *

9. Кидаем в директорию server/default/deploy

10. Здесь сервер должен сказать, что бин deployed.

11. Пишем клиента.
Код

import examples.*;
import javax.naming.*;
import java.util.*;
import javax.jms.*;

public class MDBClient
{
   public static void main(String[] args) throws Exception
   {
       Hashtable h = new Hashtable();
       h.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
       h.put(Context.PROVIDER_URL, "jnp://localhost:1099");
       h.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");

       Context ctx = new InitialContext(h);
       TopicConnectionFactory factory = (TopicConnectionFactory) ctx.lookup("java:/XAConnectionFactory");
       TopicConnection conn = factory.createTopicConnection();
       TopicSession session = conn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
       Topic topic = (Topic) ctx.lookup("topic/testTopic");
       TopicPublisher publisher = session.createPublisher(topic);
       TextMessage msg = session.createTextMessage();
       msg.setText("I'll meet you at midnight, Under the moonlight");
       publisher.publish(msg);
   }
}

Здесь ничего особенного нет. Клиент - паблишер для топика, он идет по стандартной JMS схеме : найти TopicConnectionFactory -> создать соединение -> создать сессию -> создать паблишера для нужного топика -> создать мессагу -> опубликовать ее.
параметры jndi - стандартные для jBoss, параметры для нахождения TopicConnectionFactory и topic сидят в файле server/default/deploy/jms/jms-ds.xml.

12. Компилим и запускаем клиента. Сервер выдаст вот что:
10:14:14,957 INFO [STDOUT] [RECEIVED MESSAGE] I'll meet you at midnight, Under the moonlight


Автор: Domestic Cat






Просмотров: 6993

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную