[Seasar-user:8361] Re: [S2Struts]コンポーネントが見つかりませんについて教えてください。

suga [E-MAIL ADDRESS DELETED]
2007年 6月 15日 (金) 14:09:15 JST


suga です。

On 6/15/07, 田中 修 <[E-MAIL ADDRESS DELETED]> wrote:
> staticにアプリケーション固有情報を持つのは一般的なのでしょうか?

何を持って一般的とするかはわかりませんが、例えば static にキャッシュを
持つことは良くありますし、キャッシュがアプリケーション固有であることも
良くあります。
キャッシュは基本的にパフォーマンスを出すためのものですから、static な
フィールドに持つのは定石です。
# Servlet 限定の話にしても、ServletContext は格段に速度が落ちます。


> staticは単一オブジェクトだと思っているので
> どのような使われかたをしたとしても、
> その単一オブジェクトで起動を保証するように使うものだと思っていました。

この文で言いたいことがわかりませんが、Class クラスのインスタンスと
クラスローダーとの関係を理解する必要があります。

static なフィールドはそのクラスをあらわす Class のインスタンスに保持されます。
shared に置いた場合は shared 用のクラスローダーがこのインスタンスを持ちます。
shared のクラスローダーはすべての Web アプリケーションで共有します。

共有されたとして問題がある場合もありますし、問題がない場合もあります。


S2Dao が「正常に」動いているということですが、複数の Web アプリケーションで、
同名かつ定義の異なるテーブルがある場合、正常に動作しないのではないでしょうか。
うろ覚えですが、テーブル名かクラスをキーとしたキャッシュを持っているはずです
ので、現状たまたま動いているだけだと思います。

-- 
suga ( [E-MAIL ADDRESS DELETED] )



Seasar-user メーリングリストの案内