なお、その方法について、具体的に説明しているサイトや書籍なども教えていただけるとありがたいです。
単にトランザクションを継続させたいだけなら、ユーザーごとに Connection を生成し、HttpSession に格納しておくだけで実現は可能だと思います。
ただし、Web アプリケーションにおいては以下の記事の
http://www.atmarkit.co.jp/fjava/keyword/jkey/jkey05.html
■Webアプリケーションのトランザクション の項にあるようにトランザクションは限定的に使用しないとパフォーマンス上致命的な欠陥を持つことになります。
画面遷移をまたがったデータベーストランザクションは使用しない方が賢明です。
単にトランザクションを継続させたいだけなら、ユーザーごとに Connection を生成し、HttpSession に格納しておくだけで実現は可能だと思います。
ただし、Web アプリケーションにおいては以下の記事の
http://www.atmarkit.co.jp/fjava/keyword/jkey/jkey05.html
■Webアプリケーションのトランザクション の項にあるようにトランザクションは限定的に使用しないとパフォーマンス上致命的な欠陥を持つことになります。
画面遷移をまたがったデータベーストランザクションは使用しない方が賢明です。
どうもありがとうございます。
HttpSessionを利用し、とりあえずロックをかけることはできました。
依頼主に問題点を告げてみたのですが、排他制御を行いたいとの意向から、やはりトランザクションありになってしまいました。
最善の方法は、画面にまたがるトランザクションがなくなるように
画面仕様・構成・画面遷移を見直すことだと思います。
llusallさんが指摘されているように、クライアントの操作が介在する
ので、トランザクションの維持はかなり難しいと思います。
また、一般的にトランザクションの生存時間は短ければ短いほど良く、
アプリケーションサーバのJTS(Java Transaction Service)実装や、
DBMSによって、トランザクションの最大生存時間も制限されると思います。
さらに、JTA(Java Transaction API)によるトランザクション管理もできません。
(JTAは最近のJavaアプリケーションでは一般的なトランザクション管理APIです。
JTAはスレッドとトランザクションを関連付けます。画面をまたがるということは、
スレッドが変わることを意味しますので、JTAでトランザクションを維持できません)
さらにさらに、EJBはJTAでトランザクションを管理するため、EJBは使えません。
どうしても、となるとHttpSessionにConnectionを格納する等して自前で
仕組みを作るしかないと思いますが、そうなるとConnectionが長時間アクティブ
なままになるため、コネクションプールが枯渇する恐れも出てきますね。
やはり、画面仕様の見直しをオススメします。
どうもありがとうございます。
画面自体は一つなのですが、同期Ajaxでロックありの検索と更新を行っています。
セッション削除時にコネクションをクローズし、ページロード/アンロード、画面クリア時にサーブレット側でコネクションクローズとセッションの削除を行うようにしました。
他に何か抜けている点をご存知の方がいらっしゃいましたら、ご教示ください。
どうもありがとうございます。
HttpSessionを利用し、とりあえずロックをかけることはできました。
依頼主に問題点を告げてみたのですが、排他制御を行いたいとの意向から、やはりトランザクションありになってしまいました。