dポイントプレゼントキャンペーン実施中!

(1)サーバ側のローカルファイルにある設定ファイル情報を
staticなフィールドのHashTableに保有するためのfinalなクラスがあります。WEB-INFのclassesの下にあります。

(2)、(1)に情報を格納するHttpServletを作成しました。

(3)クライアントアプリケーション(GUIのjavaアプリケーション)が起動する時に、java.net.HttpURLConnection
を使用して、(2)のサーブレットを起動し、サーバ側の
(1)のクラス内に設定情報が保有されます。

(4)クライアントアプリケーションは必要に応じて
HttpURLConnectionやブラウザーランチャーという
ブラウザ起動用のクラスを使うなどして、
Webサーバにアクセスしますが、
その際、サーバ側では(1)のクラスに格納されている
情報を参照して処理をすすめることが多々あります。

上記を踏まえた上で質問したいのですが、
(1)に格納された情報がTom-catが再起動するまで、
永続的に存続してくれないと、仕様上困るんです。
ローカルのjavaアプリケーションでは、
クラスが一度ロードされると、
そのクラスのstatic領域はアプリケーション終了時
まで、生きています。それと同じ感覚でいるのですが。
tom-cat側でロードされたクラスのstatic領域の
情報は永続的に存在しつづけるのか
教えてほしいです。
また、これはテストではあまり確認しづらいです。
うまく、いってるように見えても、5、6時間
放置しておくと、情報が消えてるかもしれないです
そんなの確認できないです。
tom-catの挙動はあまりよくしらないです。
たとえば、なにかのサービスのタイミングとかで、
情報の初期化みたいなことが行われて、(1)の
情報が消えたりしないでしょうか?
そこらへん詳しい方にご確認したいのが、
今回の質問の趣旨です。
長々とすいません。

以上

A 回答 (1件)

結論から言うと、static領域の情報は(無理やり消さなければ)永続的に存在します。



これを利用してご質問のようなことを実現するのは、Webアプリケーション開発では一般的なことです。

Webアプリケーションサーバ(ここで言うTomcat)は、Javaを動かすために、JavaVMを持っています。(持っているっていう言い方はおかしいかも…)
ですので、JavaVMに対してstaticな領域を確保したなら、それはJavaVMが終るまでstaticな領域として存在するはずです。
では、WebアプリケーションサーバにおいてJavaVMが終るのはいつか、というと、管理者がWebアプリケーションサーバを停止させた時(もしくは落ちた時)です。

ということは、意図的にWebアプリケーションサーバ(Tomcat)を停止させたり、何らかの事故で停止してしまったりしたときを除き、static領域は存在しつづけると考えてよいでしょう。

ローカルのjavaアプリケーションと同じ考えです。この場合、サーバのjavaアプリケーションであり、そのjavaアプリケーションがTomcat自体である、と考えればよいかと思います。(作成したServletたちは、Tomcatが動かす部品に過ぎないと考えればよいでしょう。)
    • good
    • 0
この回答へのお礼

ありがとうございます
大変参考になりました

お礼日時:2004/01/08 13:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!