次の行に沿って、ロギングクラスで静的オブジェクトが定義されています。
class myLoggingClass {
static java.util.Properties properties;
...
...
}
私の参考書によると、これはプロパティオブジェクトが私のクラスのすべてのインスタンスによって共有されることを意味します。
この定義では不十分だと思います。プロジェクトの各アプリケーションで複数回呼び出されるクラスを作成しています。
さらに、私たちのプロジェクトでは、同じTomcatコンテナで実行されている複数のWebサービスを使用しています。各Webサービスには複数のスレッドが含まれる場合があります。
ホスト上で実行されているJava仮想マシンは、Tomcatの外部で実行される1つ以上のWebサービスクライアントアプリケーションを実行する場合もあります。
したがって、この定義により、Tomcatがスレッドを使用して複数のWebサービスを実行し、それぞれに複数のオブジェクトがあり、クラスのインスタンスが含まれている場合があります。
また、Tomcatの外部で、同じJVM内で実行されている1つまたは2つのWebクライアントが存在する場合もあります。私のクラスのこれらのインスタンスはすべて同じプロパティオブジェクトを共有しますか?これにより、JVM全体になります。
静的オブジェクトがJVM全体ではない場合、それぞれがどのレベルに存在するかを誰かが知っていますか?Tomcatコンテナごとに1つ?Webサービスごとに1つ、スタンドアロンWebサービスクライアントアプリケーションごとに1つ?
理由:プロパティを更新すると、java.util.Propertiesからjava.lang.ConcurrentUpdateExceptionが発生します。
クラスが更新するときにプロパティオブジェクトを「ロック」するために静的ブール変数を使用していますが、これは例外の発生を妨げていません。
これにより、私のクラスで使用されている静的オブジェクトは、java.util.Propertiesで使用されているものと同じスコープレベルではない可能性があると私は信じています...しかし、それは単なる推測です。
助けてくれてありがとう。