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