人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Javaサーブレットにおいて、複数の画面にまたがるデータベーストランザクションを扱う方法を教えてください。
なお、その方法について、具体的に説明しているサイトや書籍なども教えていただけるとありがたいです。

●質問者: lains_you
●カテゴリ:コンピュータ
✍キーワード:Java サイト サーブレット データベース トランザクション
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● b-wind
●300ポイント ベストアンサー

単にトランザクションを継続させたいだけなら、ユーザーごとに Connection を生成し、HttpSession に格納しておくだけで実現は可能だと思います。


ただし、Web アプリケーションにおいては以下の記事の

http://www.atmarkit.co.jp/fjava/keyword/jkey/jkey05.html

■Webアプリケーションのトランザクション の項にあるようにトランザクションは限定的に使用しないとパフォーマンス上致命的な欠陥を持つことになります。

画面遷移をまたがったデータベーストランザクションは使用しない方が賢明です。

◎質問者からの返答

どうもありがとうございます。

HttpSessionを利用し、とりあえずロックをかけることはできました。

依頼主に問題点を告げてみたのですが、排他制御を行いたいとの意向から、やはりトランザクションありになってしまいました。


2 ● F57PB
●100ポイント

最善の方法は、画面にまたがるトランザクションがなくなるように

画面仕様・構成・画面遷移を見直すことだと思います。


llusallさんが指摘されているように、クライアントの操作が介在する

ので、トランザクションの維持はかなり難しいと思います。


また、一般的にトランザクションの生存時間は短ければ短いほど良く、

アプリケーションサーバのJTS(Java Transaction Service)実装や、

DBMSによって、トランザクションの最大生存時間も制限されると思います。


さらに、JTA(Java Transaction API)によるトランザクション管理もできません。

(JTAは最近のJavaアプリケーションでは一般的なトランザクション管理APIです。

JTAはスレッドとトランザクションを関連付けます。画面をまたがるということは、

スレッドが変わることを意味しますので、JTAでトランザクションを維持できません)


さらにさらに、EJBはJTAでトランザクションを管理するため、EJBは使えません。



どうしても、となるとHttpSessionにConnectionを格納する等して自前で

仕組みを作るしかないと思いますが、そうなるとConnectionが長時間アクティブ

なままになるため、コネクションプールが枯渇する恐れも出てきますね。


やはり、画面仕様の見直しをオススメします。

◎質問者からの返答

どうもありがとうございます。

画面自体は一つなのですが、同期Ajaxでロックありの検索と更新を行っています。

セッション削除時にコネクションをクローズし、ページロード/アンロード、画面クリア時にサーブレット側でコネクションクローズとセッションの削除を行うようにしました。

他に何か抜けている点をご存知の方がいらっしゃいましたら、ご教示ください。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ