アプリケーションでの使用を実装するために 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 回読むことを期待しています。私は正しいですか?