0

アプリケーションでの使用を実装するために CDI イベントがどのように機能するかを理解しようとしています。これは次のように構成されています。ソケット サーバーを起動する JCA リソース アダプターがあります。次に、このリソース アダプタのエンドポイントとしてマップされた MDB があります。ここで、ソケット サーバーを介してメッセージを受信したときに、このメッセージをステートレス Bean のプールに通知したいと考えています。このメッセージには、ステートレス セッション Bean が Web サービスからの他の要求に対して何らかの処理を行うために必要なデータが含まれています。

Local および Remote インターフェースを実装するステートレス セッション Bean を作成しました。ローカルのものは listenToRegistration メソッドを宣言します。

@Stateless(...)
public class myBean implements MyRemoteInterface,MyLocalInterface{
   ...

   public void listenToEvent(@Observes EventMessage eventMessage){
       logger.info("gotcha!");
   }
}

ローカルインターフェースはこのように定義されています

@Local
public interface MyLocalInterface {
   public void listenToEvent(@Observes EventMessage eventMessage);
}

JCA Resource Adapterから受け取るMDBはこんな感じ

@MessageDriven(...)
public class messagerMDB implements MessageEndpoint {
    @Inject
    Event<EventMessage> events;   

    ...

    @Override
    public void onMessage(String message) throws Exception {
       ...
       events.fire(message);
    }

}

ここで、ある時点でプールに myBean のインスタンスが 20 個あるとします。メッセージを受け取ったら、「わかった」を 20 回読むことを期待しています。私は正しいですか?

4

1 に答える 1

3

いいえ、一度だけです。サーバーは、すべてのインスタンスではなく、通知に使用する 1 つのインスタンスを選択します。それらが異なるタイプである場合は、各タイプで通知を受け取る必要があります。

于 2012-11-22T07:03:15.387 に答える