У меня есть статический объект, определенный в моем классе ведения журнала, в строках:
class myLoggingClass {
static java.util.Properties properties;
...
...
}
В соответствии с моей справочником это означает, что объект свойств используется всеми экземплярами моего класса.
Я считаю это определение недостаточным. Я пишу класс, который вызывается более одного раза в каждом приложении в нашем проекте.
Кроме того, в нашем проекте используется несколько веб-сервисов, работающих в одном контейнере tomcat. Каждая веб-служба может иметь несколько потоков.
Виртуальная машина Java, работающая на хосте, также может запускать одно или несколько клиентских приложений веб-служб, которые запускаются снаружи tomcat.
Таким образом, по этому определению у меня может быть tomcat, выполняющий несколько веб-сервисов с потоками, каждый из которых имеет несколько объектов, которые могут содержать экземпляр моего класса.
Также может существовать один или два веб-клиента, работающие за пределами tomcat, но в пределах одной JVM. Было бы все из этих экземпляров моего класса иметь один и тот же объект свойств? Это сделало бы JVM-wide.
Если статический объект не является JVM-wide, кто-нибудь знает, на каком уровне каждый существовал бы? Один на контейнер для кота? Один для каждого веб-сервиса и один для отдельного клиентского приложения веб-службы?
Причина. Когда я обновляю свои свойства, я получаю java.lang.ConcurrentUpdateException из java.util.Properties.
Я использую статическую логическую переменную для "блокировки" объекта свойств, когда мой класс обновляет его, но это не препятствует возникновению исключения.
Это заставляет меня полагать, что статический объект, используемый в моем классе, может быть не таким же уровнем охвата, как тот, который используется в java.util.Properties... Но это просто предположение.
Спасибо за любую помощь.