元の開発者の許可を得て、Javaで古いBBSMUDゲームを再実装しています。現在、ゲームロジックにはEJBセッションファサード、永続性にはJPAを備えたJavaEE6を使用しています。セッションBeanを選んだ大きな理由はJTAです。
私は、OptimisticLockExceptionが発生した場合にそれをキャッチして、データが古く、再適用/再送信する必要があることをユーザーに通知するWebアプリの経験が豊富です。マルチユーザーゲームで常に「再試行」と応答すると、ひどい経験になります。戦闘中に複数の人が1つのモンスターをターゲットにすることを期待していることを考えると、OptimisticLockExceptionの可能性は高いと思います。
telnet CLIを提示する部分である私のビューコードは、EJBクライアントです。PersistenceExceptionsとTransactionRolledbackLocalExceptionsをキャッチして、再試行する必要がありますか?いつ停止するかをどのように決定しますか?
悲観的なロックに切り替える必要がありますか?
すべてのユーザーコマンドが過剰に殺された後も持続していますか?全世界をRAMにロードし、数分ごとに状態をダンプする必要がありますか?
セッションファサードをチョークポイントとして機能するEJB3.1シングルトンにして、あらゆるタイプのJPAロックを実行する必要をなくしますか?EJB 3.1シングルトンは、マルチリーダー/シングルライターデザインとして機能します(メソッドにリーダーおよびライターとして注釈を付けます)。
基本的に、再送信/再試行のプロンプトをユーザーに提示することが受け入れられないアプリケーションで、データの同時変更に最適な設計とJavaPersistenceAPIは何ですか?