2

私のプロジェクトでは、すべてのサービスをステートレスセッションBeanとして設計しています。ワークフロー中に、新しいデータが作成され、これをクライアントに報告する必要があります。トランザクションが正常にコミットされたときにのみ、このメッセージを送信したいと思います。

xmppパケット(smackライブラリ)をディスパッチするServletContextListenerを登録しています。パケットを受信すると、ディスパッチするステートフルセッションBeanを見つけて、要求の処理を開始します。

public void processPacket(Packet packet) {
    try{
        if(packet instanceof RawRequest){
            DispatchIQService service = Core.lookup(DispatchIQService.class);
            service.process(connection, (RawRequest)packet);
            // sending of the messages should happen here, because transaction completed successful.
        }else{
            log.debug("Packet ignored: " + packet.toXML());
        } 
    }catch(Exception e){
        log.error(e, e);
    }
}
  1. 複数のBeanにまたがるワークフロー中に、この生成されたメッセージを収集するにはどうすればよいですか?ディスパッチBeanからこのリストを返し、後でメッセージを送信します。私の簡単な解決策は、メッセージを追加するリストをルーティングすることですが、よりエレガントな方法はありますか?

  2. すべてのBeanからアクセスする必要があるXMPPリソース(名簿http://www.igniterealtime.org/builds/smack/docs/latest/javadoc/org/jivesoftware/smack/Roster.html )があります。どうすればそれを達成できますか?それを静的変数に格納し、それへのアクセスを同期するのはあまり良くありません。

4

1 に答える 1

2

Markus、私はJ2EEの第一人者ではありませんが、あなたの目的のために、JMSを調べることをお勧めします。これは、メッセージベースのアプローチを実装するのに役立ちます。私は、RabbitMQシステムを使用していました。素晴らしい経験でしたが、システムを実行するには追加のソフトウェアが必要です。

于 2011-09-06T08:07:25.943 に答える