- PR -

ウェブサービスの使用する際の同時アクセスのセッションについて(oracle)

1
投稿者投稿内容
MORITA
常連さん
会議室デビュー日: 2007/03/14
投稿数: 23
投稿日時: 2007-10-11 11:58
こんにちは

vb2005(クライアント側)からウェブサービス(xml)を介してoracle10gにアクセスする
システムを開発しています。
もしほぼ同じタイミングで各クライアント側からoracle10gにアクセスした場合、先にアクセスした側のセッションを共有するなんてことはあるのでしょうか
もしそのようなケースがあるとしたら、どのような場合でしょうか?また、そのケースを回避する(必ず新規セッションになる)方法があれば教えて頂けないでしょうか。

初歩的な質問であるとしたら申し訳ありませんが、どなたかお願い致します。
こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2007-10-11 12:15
通常はウェブサービス側のコネクションプーリング(言葉が違っていたらごめんなさい)を利用するのでは無いでしょうか?
なので「セッションを共有」と言えなくもない気がします。

1トランザクション=1リクエストという設計にしておけば問題無いと思います。

1トランザクション=複数リクエストにしたい場合は、
セッションIDのような何らかのキーでやりとりすることになると思います。
MORITA
常連さん
会議室デビュー日: 2007/03/14
投稿数: 23
投稿日時: 2007-10-11 12:18
こあらさん、ありがとうございます。

>1トランザクション=1リクエストという設計にしておけば問題無いと思います。

というのは具体的どのようにすれば良いのでしょうか?

大変申し訳ないのですが宜しくお願いします。
こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2007-10-11 13:18
ウェブサービスが一回のリクエストを処理する中で、
必ずトランザクションを開始して、コミットかロールバックで終わる。
ということを聞かれています??
MORITA
常連さん
会議室デビュー日: 2007/03/14
投稿数: 23
投稿日時: 2007-10-11 13:44
>ウェブサービスが一回のリクエストを処理する中で、
>必ずトランザクションを開始して、コミットかロールバックで終わる。
>ということを聞かれています??

ウェブサービスの中で

 データベースオープン
 トランザクション開始
 更新処理
 コミット(ロールバック)
 データベースクローズ

ということしています。
上記の処理をまとめて1リクエストということですよね?

この際のセッションを共有せずに必ず新規セッションを作成したい
(1トランザクション=1リクエスト)ということですよね?

その際になにか設定、記述方法があるのでしょうか?

すいません、わかりにくくて・・・
こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2007-10-11 14:21
引用:
必ず新規セッションを作成したい


コネクションプーリングを使用しないように変更すれば良いんじゃないですか?

「データベースオープン」は、コネクションプーリングを使用している場合は、
コネクションをプールから取得しているってことですよね?



引用:
その際になにか設定、記述方法があるのでしょうか?



APサーバーの設定だったり、DB接続コンポーネントの機能だったりすると思います。
その辺のことにはあまり詳しくないので回答できません。
MORITA
常連さん
会議室デビュー日: 2007/03/14
投稿数: 23
投稿日時: 2007-10-11 15:09
こあらさん、ありがとうございます。

>コネクションプーリングを使用しないように変更すれば良いんじゃないですか?
ちょっとここらへんを確認してみます。

そもそも、この質問をさせてもらったのは下記のためです。

複数の端末から同時にファイル更新を行うと以下のメッセージが出力されていたのですが、

・この操作に対して接続がオープンされている必要があります。
・サーバは要求を処理できませんでした。−−>オブジェクト参照がオブジェクトインスタンスに設定されていません
・リモートサーバーに接続できません。

この原因が、セッションを複数で共有していて先に更新が終わった側からそのセッションに対してcloseをかけにいくため後から更新しにいったものはすべてcloseした後のためエラーになるのではと思ったからです。

こんなことって考えられるのでしょうか?

度々申し訳ありませんが宜しくお願いします。


こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2007-10-11 15:39
引用:

この原因が、セッションを複数で共有していて先に更新が終わった側からそのセッションに対してcloseをかけにいくため後から更新しにいったものはすべてcloseした後のためエラーになるのではと思ったからです。

こんなことって考えられるのでしょうか?


DBオープンはプールからコネクションを取得するだけ(実際のコネクションはオープンしていない)で、
DBクローズはプールへコネクションを戻すだけじゃなくて、実際にコネクションをクローズする様に見えるってことですよね?

あるんですかね?私には分かりません。

v$sessionを確認しながらデバッグしてみてはいかがでしょうか?

[追記]
引用:
複数の端末から同時にファイル更新を行うと


というのを忘れて回答してしまいました。
DBオープンでコネクションを取得できない。の方がしっくりきますね。

でも、何か違うエラーになりそうな気もすると言えばするし、しないと言えば・・・
[/追記]


[ メッセージ編集済み 編集者: こあら 編集日時 2007-10-11 16:03 ]
1

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