2017-10-05 11 views
0

私はすべてのローカルActiveMQメッセージを処理するための "Message Driven Bean"を開発しようとしていますが、このようなことをやってみるのは初めてです。MessageDrivenBeanがメッセージを処理していません[Wildfly]

JBOSSサーバーを使ってMDBを書く方法を説明している資料の大部分は、この場合はいくつかのキュー情報を持つxmlファイルですが、すべてのwildflyチュートリアルでは、そのような構成には何の言及もありません。

  1. メッセージプロデューサのような単純なJavaプロジェクト

  2. アンActiveMQのインスタンス実行しているローカル

  3. EJBプロジェクトがWildfly 10に展開

私は次のシナリオを持っています

私のプロデューサープロジェクトはablですeはActiveMQキューにメッセージを送りますが、この部分は動作しますが、EJBプロジェクトには@MessageDrivenアノテーションを持つTestMDBHandleという単一クラスしかありません。キューメッセージを受信するのに十分ですか? MDBは動作しないので、私は、メッセージブローカーのホストを指定するために、EJBの一種の構成またはプロパティでなければならないと想像します。

私のメッセージプロデューサ:私のプロデューサープロジェクト

java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory 
java.naming.provider.url=tcp://localhost:61616 
connectionFactoryNames = connectionFactory, queueConnectionFactory, topicConnectionFactory 
queue.MyQueue=jms/myqueue 

の内側に

import javax.jms.Connection; 
import javax.jms.ConnectionFactory; 
import javax.jms.Destination; 
import javax.jms.JMSException; 
import javax.jms.MessageProducer; 
import javax.jms.Session; 
import javax.jms.TextMessage; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 


public class MessageSender { 

    public static void main(String args[]) throws NamingException, JMSException { 
     MessageSender sender = new MessageSender(); 
     sender.sender(); 
    } 

    public void sender() throws NamingException, JMSException { 

     InitialContext jndi = null; 
     Session session = null; 
     Connection connection = null; 

     try { 
      jndi = new InitialContext(); 
      ConnectionFactory factory = (ConnectionFactory)jndi.lookup("connectionFactory"); 
      connection = factory.createConnection(); 
      connection.start(); 

      session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 

      Destination destination = (Destination)jndi.lookup("MyQueue"); 

      MessageProducer producer = session.createProducer(destination); 

      TextMessage mensagem = session.createTextMessage("Eu enviei uma mensagem!"); 

      producer.send(mensagem); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      session.close(); 
      connection.close(); 
      jndi.close(); 
     } 

    } 
} 

マイJMSプロパティは最後に、私のEJBプロジェクトは、プロパティファイルまたはXMLのいずれかの種類せずに、この単一のクラスを持っています。

package br.com.jms.mdb; 

import javax.annotation.Resource; 
import javax.ejb.ActivationConfigProperty; 
import javax.ejb.EJB; 
import javax.ejb.MessageDriven; 
import javax.ejb.MessageDrivenContext; 
import javax.jms.JMSException; 
import javax.jms.Message; 
import javax.jms.MessageListener; 
import javax.jms.TextMessage; 

@MessageDriven(name = "meuHandler", activationConfig = { 
     @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), 
     @ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/myqueue") }) 
public class Teste implements MessageListener { 

    @Resource 
    private MessageDrivenContext mdctx; 

    public Teste() { 

    } 

    @Override 
    public void onMessage(Message message) { 
     TextMessage objectMessage = null; 
     try { 
      objectMessage = (TextMessage)message; 
      System.out.println("Achei a mensagem : " + objectMessage.getText().toString()); 
     }catch(JMSException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

答えて

0

さらに、xmlファイルなどの情報をMDBのキュー情報と注釈プロパティで指定できますか?それはあなたが正しい方向に向かっていると思うからです。 2つの主なもの:

たとえば、@MessageDrivenアノテーションのプロパティ( "name"、 "mappedName"、 "activationConfig"など)を使用して、MDBがリッスンしている正確なキューを指定する必要があります。もちろん、onMessage()メソッドをオーバーライドしてメッセージを処理します。

また、この特定のキューがアプリケーションのリソースとして利用可能であることを確認する必要があります。これには、リソースタイプ(キューまたはトピック)も定義するためのjms構成を提供する必要があります。あなたの質問から、私はこれらのステップのどれが(部分的に)完了したかを知ることができません。

+0

すべて完了です! 私のEJBの プロジェクトにActiveMQ/Queueを指定するxml /プロパティファイルはありませんが、これは私の主な疑問の一つです。私が見つけたチュートリアルはすべて であり、JMSの詳細を記述するためにプロパティファイルを指定/指定していないからです。 私はちょうど1つのクラスを持つ単純なEJBプロジェクトを作成しました。すべてのプロパティー は、このクラスにアノテーションによって配置されています。 –

+0

リソースアダプタが設定されていない可能性がありますか? http://www.mastertheboss.com/jboss-server/jboss-jms/integrate-activemq-with-wildflyを参照してください。 – OnlyEM

関連する問題