• ベストアンサー

WebクライアントでDBセッションを維持させたい

C/S系システムをWebシステムに移行することを考えてます。 Webクライアントにおいて、アプリでログイン後にDBセッションをずっと保持させたままにしておきたいのです。(WebクライアントとDBセッションを1対1にしたい) APサーバ上でコネクションプーリングしてDBとのセッションを維持させておくことは知ってます。 実現方法や、実現された事例等がありましたら教えて頂けないでしょうか? DBはORACLEを利用してますが、 Webクライアントと dbms_session.unique_session_id を一意に定めたいのです。

質問者が選んだベストアンサー

  • ベストアンサー
  • 0909union
  • ベストアンサー率39% (325/818)
回答No.4

忘れていましたが、セッションIDは当然、暗号化して(ハッシュ)、ページに埋め込みです。一回のコネクションごとの使い捨てです(その辺の仕組みはわかりますよね)。クッキーによるセッションIDのタイムアウトはブラウザ事に違うような気がします。IEは指定しないと30分だったよな。 これは、URL直接指定での動作も同時に考える事ができ、有用に働きますよ。 業務用のアプリでDBを持つアプリは、その辺はほとんど解決していると思うのですが・・・ 何せ、スケーラビリティと、パフォーマンスを同時解決しないといけないですからね。 検索は、キャッシュをかなりのレイヤーの仕組みで多用していますよ。 業務用だと10万アクセスのうち1万の同時アクセスでの検索。プーリングとインデックスとキャッシュを何段階にもレイヤーにくみ、DBへのアクセスを端折るかが鍵ですよね。

その他の回答 (3)

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.3

問い合わせの内容の事かどうかわかりませんが、コネクションプーリングは、 http://msdn.microsoft.com/ja-jp/library/fbk67b6z(v=vs.80).aspx http://msdn.microsoft.com/ja-jp/library/system.windows.forms.bindingsource(v=vs.80).aspx http://otndnld.oracle.co.jp/tech/windows/odpnet/howto/04_arraybind/content.html http://otndnld.oracle.co.jp/easy/dotnet/oo4otoodp/index.html なんて見るとヒントがでていると思うのですが・・・ つまり、マイクロソフトにおんぶにだっこで、IISなどに特化すれば簡単に実現しています。私も、そのよな業務用ソフトにたずさわりましたが? 2003、4年ころですかね。 移行は、他のシステムでの技術選択がキーになると思います。 結局、一つのアーキテェクチャーではすまなくなり、複数の言語や、フレームワークをチョイスすることなったと思いますよ。

noname#259269
noname#259269
回答No.2

コネクションプーリングでは要件満たせませんし。 ペシミスティックロックの仕組みをそのまま Web に移行したいのだと推測しますが、その部分はあきらめるべきです。 セッション変数に DB コネクションを保持するという事は実装上全くもってお勧めできません。

atenzalove
質問者

お礼

ありがとうございます。 そうなんです。きっぱりと言って頂けると、背中を押された気分です。 無理とはわかりつつも、淡い期待を抱いてました。 WEB系システムでは、ペシミスティックロックはやらないんですかね??

  • MAXIMAX
  • ベストアンサー率60% (50/83)
回答No.1

クライアントと1対1に結び付けたい理由がわからず申し訳無いのですが、実現方法の前のお話なのですが、WEB クライアントはどういう仕組みで識別するのでしょうか?? 最も一般的なセッションの仕組みでそれをやると、ブラウザを開き直されるとセッション ID が変わってしまう上、前の接続が切断されたことがわからないため、最悪宙ぶらりんの DB セッションが山ほど出来てリソースがなくなるという自体が起き得ます。ライフタイムが長い cookie を使うと、逆になにかしら新規セッションを開始させなければならないケースなど想定しなくてはならず、ちょっと面倒です。 こういうことがあることもひとつのポイントとしてプールを共有する仕組みが用いられるのですが・・・・・・。

atenzalove
質問者

お礼

ありがとうございます。 CS系システムをWeb系システムに移行するに当って、 そのまま移行できればよいなーと思ったことが始まりです。 移行となると、 セッション管理や、排他制御などの仕組みが変わる(考えるのが)メンドウで。。 だったらWEBである必要ないじゃーんって感じもするのは事実なんですが・・

関連するQ&A

  • コネクションプーリングの確認方法について

    JDBCを使用してOracleへアクセスするWeb画面があります。 コネクションプーリングに対応しているとのことなので、実際に有効になっているのか確認したいのですが、次の方法で正しいのでしょうか。 (1)SQL文が実行されるWeb画面の処理を動作させた時に、OracleのV$SESSIONで、存在する「セッション識別子+シリアル番号」を確認する。 (2)この処理を何回実行しても、V$SESSIONに同じ「セッション識別子+シリアル番号」の行が存在したままになるのか確認する。 もし、Web画面の処理を実行させる度に、新しい「セッション識別子+シリアル番号」の行が増えていく場合は、コネクションプーリングが有効になっていないと考えてもいいのでしょうか。 現状は、コネクション上限数の設定に関係なく、V$SESSIONに新しい行がどんどん発生し、古い行はあるタイミングでごっそり消えるという状態です。これはコネクションプーリングされている状態なのか、コネクションプーリングされていない状態なのか、それともコネクションプーリングとは全く関係ないのか知りたいです。 (なお、アイドルタイムアウトの設定は十分長く、タイムアウトは発生しない(はず?)のタイミングでWeb画面を操作しています。)

  • セッションIDの保存場所について

    オンラインショッピングサイトや、SNSサイトなどのWebシステムで クライアントの状態を保持するセッション情報を識別するためのセッションIDは、 アプリケーションサーバーの中にあるセッション情報を持つインスタンスの中に持たせておくものなんでしょうか、それともDBに入れていったん永続化してしまうものなんでしょうか。

  • DBCPで、DB切断後のコネクション取得

    struts1.3 + spring1.2 + tomcat + oracleで開発中です。 DBCPでコネクションがプーリングされた状態で、DBが停止・再起動 した場合、DB停止前からプーリングされていたコネクションは 無効になってしまいますが、これの対処はどうするのがベストでしょうか。 (1) testOnBorrow で検査する →コネクション取得の都度発行される検査用SQLの負荷が心配 (2) testWhileIdle で検査する。 →検査スレッドの起動間隔はどれくらいが適当なのか? (3) getConnection時に自前でリトライするロジックを組み込む →WebSphereにある、StaleConnectionExceptionのような例外がある? (4) もっと別の画期的な方法がある!! 以上、よろしくお願いします。

  • DBサーバと接続しているプロセスを見たい

    Oracleクライアントから、他のどのプロセス(もしくはスレッドか、 コネクションか)がサーバと接続しているかを見たいですが、 クライアントからは可能でしょうか?SQLで実現できますか? ご教授お願いいたします。

  • ドットネットフレームワークのDB接続

    ドットネットフレームワークについての質問です。 ドットネットフレームワークはAPサーバの代わりだと聞いております。 そこで、APサーバ(ドットネットフレームワーク)からDBサーバへ一定数のセッションを常にはるというのは可能なのでしょうか? (クライアントからの要求があれば空いているセッションに割り振られて処理される) それとも、各クライアントの接続に応じてセッションが発生するものなのでしょうか? (パフォーマンスが知りたく。。) なにか参考になるWebサイトなどあればご紹介していただきたく よろしくお願いいたします。

  • Ajaxにおけるセッション

    会社の先輩から 「Ajaxを使ったWebページはセッション(※セッションIDのことを短縮して言ったのかは不明)を持ち続けてしまうことが問題」 と言われたのですが、これは正しいのでしょうか? XMLHttpRequestのオブジェクトから常にopen、sendし続けているのであれば セッションを持ち続けるかもしれませんが、 例えばopen、sendをページのロード時にたった一回しかつかわないページであれば、 最初のreadystateの値が4になった時点で(もう二度とXMLHttpRequestのオブジェクトからはリクエストしないので)コネクションは切れて 放っておくとセッションIDは切れるのではないでしょうか? それともクライアント(ブラウザ)にXMLHttpRequestのオブジェクトが存在している限り、 セッションは切れずに保持されるのでしょうか? よろしくお願いします。

  • Tomcat上でのSessionの値の取得

    Tomcat上で動作しているイントラのWebのコンテンツがあります。 サービスの要件として、Sessionの有効期限は3ヶ月になっています。 このSessionの中に最終アクセス時間を保持するように作ってあります。 1日1回夜間バッチでこのSessionの最終アクセス時間をDBに書き込むように したいと考えているのですが、そもそも他のプログラムからSessionの値を 参照することは可能なのでしょうか? イントラのシステムであり、Sessionに持っている値には重要なものはなく、 仮にセッションジャックされても大した被害になるようなものではないので セキュリティはそれほど意識する必要はありません。 どなたかこういったことを実現出来るかどうか、出来るならどうするかご存知の方いらっしゃいませんか?

    • ベストアンサー
    • Java
  • DB2でのロック

    Oracleで今まで開発しており今回始めてDB2での開発を行うものです。 Oraleと同じロックのかけ方をDB2で行いたいのですが、どのように記述すればよろしいでしょうか。 かけたいロックは ・セレクトした対象行のみにロックをかける ・他のセッションからは、ロック前の情報を参照可能 ・コミットまたはロールバックを行うまでロックを保持する です。 よろしくお願いします。

  • コネクションプーリングの枯渇

    tomcat-Servletでの開発を行っています。 MVCモデルでのWEBアプリケーションです。 DBへの接続用として自作のコネクションプーリングを使用しています。 (プーリング数は20を設定) 基本的なSQL実行フローは下記のようになります。 1.コネクションプーリングを取得 2.SQL文を実行 3.コネクションプーリングを返却 ところが、時間を置いて psコマンドで確認すると、 だんだん数が減っていっているようです。 原因を調査しているのですが、 もし次のような原因で正しいかどうか分かりましたらご連絡ください。 <考えている原因> 要するに上記の3(返却)がされていないのであって。 ・実行処理中に利用者がクライアント側のブラウザを落としている。 と仮説を立てているのですが。 この仮説が正しいかどうか、 また、もし正しい場合には、どうすれば回避可能かをご教授ください。 補足の必要があればご連絡ください。 (コネクションプーリングの全文を載せたいのですが、  長すぎるようで・・・)

    • ベストアンサー
    • Java
  • web2台+DB2台のwebシステム開発

    web1、web2、db1、db2を使用したwebシステムを開発し勉強したいと思っております。 下記構成で考えています。 <構成> web1-DB1 |      | web2-DB2 webは、apacheで考えています。最悪IISでも構いません。 DBは、mysqlかposgreで考えています。最悪SQLServerやOracleでも構いません。 <質問1> web1-DB1 web2-DB2 で接続する構成を考えているのですが、 apache1、apache2からは、両方のDB1、DB2に接続する構成を取るのが普通でしょうか? <質問2> 何か良い参考書等はありませんでしょうか。 ご教授お願いします。

専門家に質問してみよう