2016-08-04 9 views
1

JMSプロジェクトを使用して永続エンティティオブジェクトをMDBに送信するようにプロジェクトをセットアップしました。私はJBoss EAP 7をメッセージングプロバイダとしてApache ActiveMQを使用して使用しています。これは、パラメータとして「アカウント」エンティティオブジェクトを受け取り、キューに送信し、私のメッセージプロデューサであるJMSメッセージプロデューサはキューにメッセージを送信しません

AccountAccessQueue

ConnectionFactory

:私はそうのようなのConnectionFactoryとキューを設定

EntityEnqueueBean.java

@Stateless 
@LocalBean 
public class EntityEnqueueBean { 

    Context context = null; 

    public void enqueueEntity(Account accountEntity) {  
     try { 
      context = new InitialContext(); 
      ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("java:/ConnectionFactory"); 
      Destination queue = (Destination) context.lookup("java:/jms/queue/AccountAccessQueue"); 
      Connection connection = connectionFactory.createConnection(); 
      Session session = connection.createSession(true, Session.SESSION_TRANSACTED); 
      MessageProducer messageProducer = session.createProducer(queue); 
      ObjectMessage objectMessage = session.createObjectMessage(accountEntity); 
      messageProducer.send(objectMessage); 

      messageProducer.close(); 
      session.close(); 
      connection.close(); 
     } catch (JMSException | NamingException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

は、MDBは、キューからメッセージを受信し、それを処理します。

AccountPersistenceMDB.java

@MessageDriven(
    activationConfig = { @ActivationConfigProperty(
      propertyName = "destinationType", propertyValue = "javax.jms.Queue"), 
      @ActivationConfigProperty(propertyName = "destination", 
      propertyValue ="java:/jms/queue/AccountAccessQueue") 
    }) 
public class AccountPersitenceMDB implements MessageListener { 

    public void onMessage(Message message) { 
     ObjectMessage objectMessage = null; 
     objectMessage = (ObjectMessage) message; 
     try { 
      Account accountEntity = (Account) objectMessage.getObject(); 
      System.out.println("MDB accessCount: " + accountEntity.getAccessCount()); 
     } catch (JMSException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

私が間違って取得していますかわかりません。 ConnectionFactoryとキューを間違って設定するコードがあるかもしれませんが、Java EEの初心者ではないのでわかりません。どんな助けもありがとうございます。

+0

サーバーのログ上の任意のスタックトレース?例外はありますか? –

+0

@RamachandranGAいいえ、すべて正常に機能しますが、MDBが結果を表示する部分は機能しません。また、JBoss管理パネルのキューを監視すると、キューにメッセージが送信されていないことがわかります。私は間違っていることを特定することができません。 –

+2

トランザクションに問題があり、メッセージがコミットされていない可能性があります。セッションを次のように変更してみてください.. Session session = connection.createSession(false、 Session.AUTO_ACKNOWLEDGE); – mendieta

答えて

1

@mendietaのおかげで、私はこの問題を修正しました。私はJMSセッションを読んで、それは完璧な意味合いを持っていました。 EntityEnqueueBean.javaにトリックこの行を変更しました:

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

私は、反対にすることで問題を修正しました。 Session.AUTO_ACKNOWLEDGE - > Session.SESSION_TRANSACTED。 – Edza

関連する問題