Forums: Open Discussion (Thread #17665)

PropertyUtil プロパティ保持しているスコープについて (2008-02-12 13:26 by Anonymous #34985)

Websphere等、商用APサーバではサーバ(VMプロセス)単位でなくアプリケーションという単位で停止、再起動できます。
メンテ等で特定アプリケーションのみ停止して、プロパティの修正を行いたい場合、staticイニシャライザでプロパティ更新を行っていると更新を反映できないのではないか?
また、1サーバ上で動作する複数のアプリケーション毎に違うプロパティを保持したい場合に、propsをstaticでなく違うスコープで持ちたいときがあると思われます。
改善検討お願いします。 at システム企画

Reply to #34985×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: PropertyUtil プロパティ保持しているスコープについて (2008-02-25 13:28 by yggd #35273)

まず、static イニシャライザは VM プロセスではなく、
対象のクラスロード時に実行されます。
また、WAS では、他の WebAP サーバと同様、アプリケーション内で
使用されるクラスローダは以下のように階層構造になっています。

・WebSphere Extenstion class loader (WAS のブートに必要なレベル)
・Application class loader (EAR レベル)
・WAR class loader (WAR レベル)

よって、PropertyUtil で使用されるクラスやプロパティファイルが
どの領域にデプロイされるかによって、初期化のタイミングが異なります。

一般的に、プロパティファイルは Web アプリケーションの
WEB-INF 内に配置されるため、
Web アプリケーションの再起動時に修正が反映されるものと考えます。


参考:
http://www-1.ibm.com/support/docview.wss?uid=std3ed8de1a07cb0b300492572280035ba23


以下、PropertyUtil の機能、
及びアプリケーションスコープでプロパティを保持する方法
について回答します。


1) PropertyUtil の機能について

PropertyUtil で扱うプロパティは、フレームワークやビジネスロジックといった多くのクラス群から参照されるため、動作中に設定を改変することで
アプリケーション誤作動の原因となるものが多く含まれています。
つまり、PropertyUtil 内のプロパティの修正が必要な場合、
それらを利用する各種クラスにも影響が及ぶため、アプリケーションを停止させる必要があります。


2) アプリケーション毎に違うプロパティを保持したい。

こちらは、ServletContext 属性や、DB 内にプロパティ
を保持する領域を設けることで、他のアプリケーションと
独立した管理が可能になるかと考えます。

ただし上述の理由により、動的なプロパティとすることにより生じるデメリットが大きいことから、
PropertyUtil は、ServletContext などとは独立したスコープを持っています。
Reply to #34985

Reply to #35273×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: PropertyUtil プロパティ保持しているスコープについて (2008-02-27 13:49 by Anonymous #35304)

> まず、static イニシャライザは VM プロセスではなく、
> 対象のクラスロード時に実行されます。

一度ロードされた
ロード済みのクラスは再ロードされません。
プロセスが落ちてないということはロード済みのまま残っていると想定されます。
(デバッグ時以外はダイナミックロードなし、ローダ子優先にしてます。)

要はstaticイニシャライザでなくinit(),destroy()できっちりとやりたいということでした。

> こちらは、ServletContext 属性や、DB 内にプロパティ
> を保持する領域を設けることで、他のアプリケーションと
> 独立した管理が可能になるかと考えます。

EAR内に複数のWARが存在してそれぞれに同じpropertiesファイルがあった場合、ContextClassLoaderからリソースを見てるのでそれぞれから取得しているのに、取得したものをstatic領域に保持しているのがひっかかりました。
Reply to #35273

Reply to #35304×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login