3


3

J2EEアプリケーションで非同期処理を実装する方法

毎日約2,000人の同時ユーザーを抱えるエンタープライズアプリケーションがあります。 これらのユーザーは顧客からの電話を処理するため、アプリケーションの速度は非常に重要です。

ユーザーが通話を終了するとき、キャプチャしたすべての情報をコミットします。 このコミットには10​​〜45秒かかります。

ユーザーから遅延を取り除く方法を検討しています。

I.Eで実行されているWebフロントエンドがあります。 バックエンドは、単一のEJBで実行される重いJavaです。

ユーザーがリクエストを送信すると、次の顧客に進む前にコミットが完了するのを待つ必要がないという点で、このコミットプロセスを非同期にしたかったのです。 これは現在実装されているものです。

もともと私は、コミットを処理するために別のスレッドを生成することを考えていましたが、それはEJBではありません。

私が考えることができる他のオプションは、JMSまたはSIBを使用するでしょう、

最善の解決策は何でしょうか。 私が見逃している別の選択肢はありますか?

2 Answer


7


そのような場合には、実際には2つの選択肢があります。

  • 最初の方法は、JMSを使用することです。 サーバーが 必要なすべてのインフラストラクチャを提供し、多くを自分で実装する必要はありません。

  • 別の方法は、リクエストをデータベースに登録し、 それらすべてを処理するスケジュールされたイベント。

選択する内容は要件によって異なります。 要求が到着したらすぐに処理する必要がある場合は、JMSを使用する必要があります。 どちらの場合でも、リクエストの結果をデータベースに保持し、その最上部でWebサービスを設計する必要があります。 フロントエンドはこれを(ポーリングを通じて)使用して、結果をユーザーに提示できます。


2


コメントを残したいが、能力を持っていませんでした。

他の可能性:

重いEJBをキューメカニズムでラップし、同じAPIを使用して別のBeanを公開します。これにより、クライアント側の通信が新しいBeanと通信して高速になります。 彼らはリクエストを受け入れ、ジョブをキューに追加し、すぐにクライアントに戻ります。 重いEJBやクライアント通信を変更する必要はなく、メディエーターを邪魔するだけで、ラッピングのレイヤーを追加できます。