Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MDB - это просто 
:(
    Опции темы
Domestic Cat
Дата 25.3.2005, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



 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
 

 


--------------------

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0467 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.