2

私はJavaEE6プロジェクトを含む論文に取り組んでいます。(電話から)1時間以内に食べ物を配達する必要があるレストランサービスに関するサンプルプロジェクトを設定する必要があります。プロジェクトはCDIApiを使用し、BPMフレームワークに適合する可能性がありますが、プレーンなJava EE6Apiのみを使用する必要があります。

私はいくつかの実行可能な選択肢について考えてきましたが、私の要件に適合する唯一の選択肢は、@SessionScopedBeanを使用してユーザー要求をバックアップすることです。次に、そこからEJBタイマーを開始します。これは、ユーザーによってキャンセルされない限り(時間内に配信)、1時間以内にタイムアウトします(配信が遅れます)。

私の懸念は、@ SessionScoped BeanとEJBタイマーの間に1:1の関係を関連付けることができるかどうかです。つまり、EJBタイマーはユーザーにのみ関連付ける必要があり、タイマーの期限が切れたときに通知する必要があります。私が順調に進んでいるのか、それともアーキテクチャについて再考する必要があるのか​​、提案してもらえますか?どうもありがとう

4

2 に答える 2

2

1:1 マッピングに関するご質問について、仕様には次のように記載されています。

自動的に作成されたタイマーの場合、タイムアウト メソッドは、Schedule アノテーションが付けられたメソッドである場合があります。タイマーは、ステートレス セッション Bean、シングルトン セッション Bean、メッセージ駆動型 Bean、および 2.1 エンティティ Bean に対して作成できます[94]。ステートフル セッション Bean のタイマーを作成できません [95] ...

さらに、"@SessionScoped" は POJO を CDI マネージド Bean に変換し、Timer サービスは EJB 機能です。

ただし、データベースにアクセスできると仮定すると、次の解決策をお勧めします。顧客が何かを注文するとすぐに、「作成済み」タイムスタンプを含むエントリをデータベースに作成します。このテーブルを 1 分ごとにポーリングして、(タイムスタンプ列をチェックすることによって) ユーザーが通知を受ける必要があるかどうかを確認するスケジューラ/タイマーを構成します。

于 2012-11-18T11:36:20.840 に答える
2

デザインパターン Observer の実装が必要だと思います

CDI は @Observes を使用してこのサービスを提供しています。この例をご覧ください http://www.adam-bien.com/roller/abien/entry/java_ee_6_observer_with

顧客データでイベントを発生させ、1 時間後に処理を行う @asynchronous サービスを呼び出すことができます。データが失われた場合や例外が発生した場合は、失敗した操作をデータベースに永続化してください。

@Schedule サービスを使用して、失敗したすべての操作をスキャンし、処理を再試行することができます。

または、JMS ソリューションが提供するものも確認していただけますか

私が理解したことを願っています..

于 2013-05-03T05:42:23.400 に答える