RIA コンテキストに対する最後のリクエスト
お世話になります。
RIAでコンテキストが消えずに残る事があり
不要なコンテキストを削除するため
コンテキストに対する最後のリクエストを
取得できないかと考えています。
コマンドラインリクエスタにて
①-QUERY-CTXS にてコンテキストの情報を取得し
②-QUERY-LOG にてリクエストの情報を取得できますが
①と②を紐つける項目がありません。
何か良い方法が無いでしょうか。
宜しくお願い致します。
-
動作環境テーブルの「アプリケーションサーバ」タブにある、「コンテキスト非稼働タイムアウト」を使用されるといいと思いますよ。
「コンテキスト非稼働タイムアウト」とは、各ユーザの最後のリクエストから何秒経過したかでセッションをタイムアウトさせる機能です。タイムアウトするとコンテキストが自動的に強制削除されます。
デフォルトの値は今は24時間となっていますが、この機能がついた最初のころはタイムアウトが10分でした。たった10分ではトイレに行って戻ってくるだけでセッションが切れてしまうと、冗談で文句を言ったら24時間にあげてくれました(笑。
さすがに24時間ではコンテキストが溜まりすぎてしまうと思いますので、2時間くらいでいいかなとも思います。
もっと細かく制御したい場合は、メインプログラムにタイマーロジックを設定してタイムアウトを記述するといいですよ。ちょっと手間がかかりますが。。。
-
ありがとうございます。
「コンテキスト非稼働タイムアウト」を設定しているにもかかわらず
コンテキストのゴミが残る事があります。原因はわかりません。
そのために、定期的に手動でゴミコンテキストを削除したいと考えています。
-
コンテキスト非稼働タイムアウトが「0」になっていると、タイムアウトが無効になります。
リクエスタが別のmagic.iniを見にいっているということはありませんか?
-
ContextInactivityTimeout = 216000
6時間で設定しています。
参照しているiniが間違っている事はありません。
間違ってxpa4.xに投稿しましたが、
実際に稼働している環境はxpa3.1の最終PTでした。
-
同じマシンに開発版もインストールされているということはありませんか?
-
ありがとうございます。
運用環境には開発版はインストールされていません。
-
それでは、別のバージョンのRIAサーバ、あるいはEnterpriseサーバがインストールされているということはありませんか?
現在は、エイリアス名にバージョン番号が入るようになっていますが、以前はエイリアス名が同じとなっていた時期がありました。
-
RIA Serverの1つのバージョンのみインストールされており
他のMagicはインストールされていません。
-
コンテキストのゴミが残るというのは、何か原因があるのではないかと思うのですが、何なんでしょうね。ゴミがどういうタイミングのときに残るのかということは検証してみられましたか?
-
今、あらためて関数リストを見てみましたら、「CtxLstUse()」という関数が追加されていますね。これなんか使えそうですね。
-
失礼。追加というか、xpa 2.5から存在していますね。
あと、私は以前、メインプログラムにグローバル変数のタイマーをセットして、各ユーザの最後のリクエストを追跡するプログラムを作ったことがあります。もう20年ちかく前のことなので、どのように作ったのかは思い出さなければなりませんが。。。
-
ありがとうございます。
回答が遅くなり申し訳ありません。
基本的にはコンテキストのゴミが残る事はないのですね。
ゴミが発生する理由は色々調査したのですが、わかっていません。
プログラム側に何かを仕込むのは副作用の事を考えて避けたいところです。
「CtxLstUse()」は使えそうですね。試して見たいと思います。
-
はい、昔と違って、今はこの関数を使えば簡単にできそうな気がします。あとで時間があるときに、私も試してみよう思います。
-
E_yさん、
CtxLstUse()関数を試してみましたところ、思った通りの動きをしてくれました。
この関数を用いて、すべてのコンテキストの非稼働時間を判定し、一定時間以上の非稼働が続いているコンテキストが見つかったら、CtxClose()関数でそのコンテキストを強制的に(かつ安全に)閉じるという処理です。
使用したMagicのバージョンは、xpa 4.8.1 pt1です。
-
こちらの方でも確認してみたいと思います。
ありがとうございました。
サインインしてコメントを残してください。
コメント
15件のコメント