2

チケット注文用のステートフル EJB があります。ユーザーがチケットを選択しても支払いをしない場合、特定の期間、たとえば 10 分間保持される機能を実装したいと考えています。そのため、ユーザーがチケットの選択を送信すると、利用可能なチケットのデータベースから削除されるように実装しました。ここで、タイムアウト時に支払いが行われたかどうかを確認し(データベースを介して可能です)、そうでない場合はそれらのチケットをデータベースに返すタイマーを設定する必要があります。

チケットの順序で ejb を使用しますが、これはステートフルであり、EJBTimer サービスはステートフル Bean をサポートしていません。どのようにそれを行うことをお勧めしますか?

タイムアウトを処理する使命を別のステートレス Bean に委任することは可能ですか? この場合、タイマーを作成するメソッドと @Timeout で注釈が付けられたメソッドのみが含まれます。選択したチケットに関するすべての詳細をステートレス Bean に渡す方法がわかりません。これは、Bean プロパティとして保持できないためです (Bean がステートレスであることが原因)。タイマーを作成するメソッドにのみ渡すことができますが、タイムアウト時に呼び出されるメソッドで使用する必要があります。

PS私はグラスフィッシュ3.1を使用しています

助けてくれてありがとう。

4

1 に答える 1

2

タイマーの作成中に情報を渡すことで、タイムアウト メソッドに詳細を渡すことができます。

シリアル化されたオブジェクト (チケット情報を保持するための適切なデータ構造) を渡すか、既存のクラスを変更してSerializableインターフェイスを実装することができます。

createTimer(long duration, Serializable info)

これで、タイムアウト期間の後で、オブジェクトinfoを呼び出してタイムアウト メソッドでこのオブジェクトをgetInfo()取得できTimerます。

[タイマーを作成するための異なる署名で利用可能な他の方法があります]

于 2013-10-30T10:00:35.937 に答える