2012-03-16 14 views
0

Java EE環境で以下のことを行う際に、「承認済み」またはベストプラクティスのアプローチを決定しようとしています。クライアントがWebページ上にあり、ボタンをクリックしています。これは、プロセス、すなわちデータベース活動、ネットワークなどを監視するスレッドを開始する。このプロセスは、プロセスが終了するように指示するボタンをユーザがクリックするまで、引き続き実行される。他のクライアントおよび/または同じクライアントがボタンをクリックしてそのプロセスから送信されているステータスを聞くと、ユーザがリッスンを停止するためにボタンをクリックするまでリッスンし続けます。Java EEとバックグラウンドスレッド

WebSocketApplicationを継承したシングルトンEJBを取得したサーブレットと通信するために、すでにWebSocketを使用して上記を行っています。しかし、このEJBはプロセススレッドを生成して監視を行います。それは動作し、シングルトンであるため動作し続ける必要がありますが、それを行う "承認された"方法ではありません。

いくつかの提案私は、JMSを使用してスレッドを生成することについて検討しましたが、誤解しない限り、Message Driven Beanはスレッドを生成するものではないため何も解決しません。では、これを行うための承認済み/ベストプラクティスの方法は何ですか? Java EE環境でバックグラウンドプロセスを開始および停止するにはどうすればよいですか?この場合も、要求が発行されるのは1つのプロセスだけで、サーブレットに登録されているすべてのWebSocketと通信する必要があります。メッセージを送信すると死ぬことができます(サーバーがソケットを閉じるわけではありませんバックアップを開始し、以前に登録したすべてのクライアントと通信します)。

ありがとうございました。

答えて

1

このEJBは

EJBがnot permitted to start threadsいる処理スレッドを産卵されます。標準を尋ねる:

エンタープライズBeanはスレッドを管理しないでください。エンタープライズBeanは、スレッドを開始、停止、中断、再開、またはスレッドの優先順位や名前を変更するために、 を試行してはなりません。 prize Beanは、スレッドグループの管理を試みてはなりません。

これらの関数は、EJBコンテナ用に予約されています。エンタープライズBeanがスレッド を管理できるようにすると、コンテナの実行時環境を適切に管理する能力が低下します。

これは仕様です。仕様の状態は以下の

エンタープライズJavaBeansアーキテクチャーは、簡単にアプリケーションを作成するようになります:アプリケーション 開発者は低レベルのトランザクションと状態管理の詳細、 マルチスレッド、接続プーリング、または他のを理解する必要はありません複雑な低レベルのAPI

ステートフルセッションBeanの使用を検討しましたか?ボタンをクリックすると、Beanは「開始済み」状態になります。 2番目のボタンをクリックすると、Beanは「停止」状態になります。

0

答えは非同期EJB 3.1 Beanです。返信いただきありがとうございます。

1

エンタープライズ環境でスレッドを作成するには、ManagedThreadFactoryまたはManagedExecutorServiceのいずれかを使用する必要があります。あなたが管理するスレッドプールにあなたのEJBにアクセス権を与えることをManagedExecutorServiceを使用できるJava EE 7のとおり

here

0

を参照してください。