- PR -

[ASP.NET]Oracleとのセッション

投稿者投稿内容
ttcoupe
大ベテラン
会議室デビュー日: 2003/01/17
投稿数: 116
お住まい・勤務地: 大阪市
投稿日時: 2003-06-16 20:07
いつも拝見しています。

現在oo4o + ASP.NETでのWebアプリを構築しています。

現在問題となっているのはDBとのセッションをどのタイミング
で貼るのかという問題です。

現在はSQL毎にセッションとコネクションを宣言して、カーソル
使用後は破棄しています。(でもこのセッションがなかなか解放で
きていないです・・・。)

Application_Startイベントでセッションを張って、Application_End
イベントでリリース。
もしくはSession_Startイベントでセッションを張って、Session_End
イベントでリリース。

という2つのパターンを考えています。
みなさんはどの方法をされてりるでしょうか。

ご教授をください。
satoc
会議室デビュー日: 2003/06/17
投稿数: 3
投稿日時: 2003-06-17 14:05
こんにちわ。
佐藤です。

引用:

ttcoupeさんの書き込み (2003-06-16 20:07) より:
Application_Startイベントでセッションを張って、Application_End
イベントでリリース。
もしくはSession_Startイベントでセッションを張って、Session_End
イベントでリリース。



oo4oのコネクションプールを使うと良いと思いますよ。
私はASP.NETではADO.NETで繋いでるので、普段使う事はないのですが……(^_^;

でわでわ。
ttcoupe
大ベテラン
会議室デビュー日: 2003/01/17
投稿数: 116
お住まい・勤務地: 大阪市
投稿日時: 2003-06-17 17:24
satocさんありがとうです。

CreateDatabasePoolを調べました。
あまりOracleのヘルプには詳細なことまで書かれて
なかったのでかなりの疑問があります。

1.初期プール値はこのCreateDatabasePoolを作成すればその数だけの
  セッションが作られるのか。

2.最大プール値を超えたときの対応は?

3.Application_StartイベントとApplication_Endイベントで
  いいのか?

4.複数のアプリを同じマシンからセッションをはりにいった場合は
  そのGlobal.asaxの記述があるWebアプリのプール数を書くのか。
  それとも同じマシンからだかすべて統一でいいのか。

です。みなさんご教授ください。
satoc
会議室デビュー日: 2003/06/17
投稿数: 3
投稿日時: 2003-06-18 15:36
こんにちわ〜。
佐藤です。

引用:

ttcoupeさんの書き込み (2003-06-17 17:24) より:

1.初期プール値はこのCreateDatabasePoolを作成すればその数だけの
  セッションが作られるのか。



initialSizeの指定数だけ張られます。

引用:

2.最大プール値を超えたときの対応は?



同時アクセス数やハードウェア要件等、またはシステム要求によるかと思います。一般的なシステムならConnectionPoolがあふれるとは思い難いので、待てば良いと思いますが……。
時間あたりのトランザクション数が万単位だ、とかアクティブなサイトですか?

引用:

3.Application_StartイベントとApplication_Endイベントで
  いいのか?



たぶん良いと思います。
でも、もしシリアライズするつもりなら、Poolクラスを作ってSingletonに実装してしまった方が良いと思います。

引用:

4.複数のアプリを同じマシンからセッションをはりにいった場合は
  そのGlobal.asaxの記述があるWebアプリのプール数を書くのか。
  それとも同じマシンからだかすべて統一でいいのか。



これも要件次第かと思いますが(^^;
全アプリケーションでひとつのコネクションプールを使用したい、という事でしょうか?

あまり気になるようでしたら自分でoo4o用にコネクションプールを作った方が早い、という考え方もありだと思います。

でわでわ。

ttcoupe
大ベテラン
会議室デビュー日: 2003/01/17
投稿数: 116
お住まい・勤務地: 大阪市
投稿日時: 2003-07-11 02:18
こんばんわ。レスが遅くなってしまって(^^;

自分でしてみました。
で、質問なのですが、最初にCreateDatabasePoolする時に
作成されたOraSessionはSession変数に入れたり、プロジェ
クト内でグローバルにさせるのですが?(シリアル化も??)
あと、複数アプリが1つのDBサーバへ同じ手法でアクセス
するのですが、実用的にはどうすればよいのでしょうか。

一応調べてみてはいるのですが、更新の時に独立したセッション
を作成しないといけないとか色々あるみたいですね。

よろしくお願いします。
ttcoupe
大ベテラン
会議室デビュー日: 2003/01/17
投稿数: 116
お住まい・勤務地: 大阪市
投稿日時: 2003-07-29 13:51
いつも拝見しています。

コネクションプールの使用で質問があります。
現在複数のアプリを同一IIS上で使用しているのですが、これを
1つのコネクションプールから使用したいと考えています。

何かルートとなるプロジェクトを作成すれば実現できるのでしょうか。
それともsatocさんの言われる「Poolクラスを作ってSingletonに実装」
をすればよいのでしょうか。

ご教授をください。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-07-29 14:51
 oo4oを使わなければいけないのでしょうか?
ODP.NET、.NET Framework Data Provider for Oracle、Data Provider for OLEDBなどでは、接続プールは自動管理されています。

 ざっと見たかんじ、Session_endは「PG内で明示的にセッションオフにしないと」と通らないようです。Application_endも、デバッガで動かしている中では通っていないようです。「おわり」を明示的に示さないと、「終わった」判断ができないのではないでしょうか。
ttcoupe
大ベテラン
会議室デビュー日: 2003/01/17
投稿数: 116
お住まい・勤務地: 大阪市
投稿日時: 2003-07-29 14:59
Jittaさんありがとうございます。

oo4oを使用してのプログラミングをして、もうすでに
全体のテスト段階に入ってるのです。ODP.NETへの乗り換え
も検討したのですが、単純な置き換えではすまないのがわ
かったのと、oo4oの機能がフルにODP.NETで使用できるのか
調査ができなかったので、oo4oで接続プールを使用し、
オブジェクト終了時にMarshal.ReleaseComObjectなどを
使用しています。

ということで、現段階のままでいきたいのです。
何かよい指針はありますでしょうか。

スキルアップ/キャリアアップ(JOB@IT)