21.2.3. メッセージ駆動型 Bean を使用したメッセージの受信


EJB3 メッセージ駆動型 Bean を利用してメッセージ処理が可能です。 メッセージ駆動型 Bean は Seam コンポーネントとすることも可能です。 この場合、 イベントスコープでアプリケーションスコープの Seam コンポーネントのインジェクトが可能です。 次に支払いプロセッサに委任する支払いレシーバーの例を示します。

注記

@In アノテーションで create 属性を true に設定する必要がある場合があります。 これにより Seam はインジェクトされるコンポーネントのインスタンスを作成できます (コンポーネントが自動作成に対応しない場合にのみ必要となります。 つまり、 @Autocreate アノテーションが付与されません)。
まず、 メッセージを受信するメッセージ駆動型 Bean を作成します。
@MessageDriven(activationConfig = 
    {@ActivationConfigProperty(propertyName = "destinationType",
                               propertyValue = "javax.jms.Queue"),
     @ActivationConfigProperty(propertyName = "destination",
                               propertyValue = "queue/paymentQueue")
})

@Name("paymentReceiver")
public class PaymentReceiver implements MessageListener
{
  @Logger private Log log;

  @In(create = true) private PaymentProcessor paymentProcessor;
    
  @Override
  public void onMessage(Message message)
  {
    try {
      paymentProcessor.processPayment((Payment) ((ObjectMessage) 
                                      message).getObject());
    } catch (JMSException ex) {
      log.error("Message payload did not contain a Payment object", ex);
    } 
  }
}
Copy to Clipboard Toggle word wrap
次に、 レシーバーによる支払い処理の委任先に Seam コンポーネントを実装します。
@Name("paymentProcessor")
public class PaymentProcessor {
  @In private EntityManager entityManager;

  public void processPayment(Payment payment) {
    // perhaps do something more fancy
    entityManager.persist(payment);
  }
}
Copy to Clipboard Toggle word wrap
メッセージ駆動型 Bean でトランザクションの動作を実行したい場合は、 XA データソースで作業するようにしてください。 そうでない場合は、データベーストランザクションがコミットする場合にはデータベースの変更をロールバックできなくなりますが、 その後のメッセージ動作は失敗します。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat