У меня есть код, который я хочу разрешить только одним потоком. Я знаю, как это сделать, используя либо synchronized
блоки или методы, но будет ли это работать в кластерной среде?
Целевая среда - это WebSphere 6.0 с двумя узлами в кластере.
У меня такое ощущение, что synchronized
не будет работать, так как каждый экземпляр приложения на каждом node будет иметь свой собственный JVM, правильно?
То, что я пытаюсь сделать здесь, это выполнить некоторые обновления записей базы данных при загрузке системы. Он будет искать любые записи базы данных, которые старше, чем версия кода, и выполнять определенные задачи для их обновления. Я хочу только один node выполнить эти обновления, так как я хочу быть уверенным, что каждый рабочий элемент обновляется только один раз, а производительность этих обновлений не вызывает большого беспокойства, поскольку это происходит только при запуске приложения, и это только на самом деле делает что-либо, когда код был изменен с момента последнего запуска.
База данных - DB2v9, и я обращаюсь к ней напрямую через JNDI (без уровня ORM).
Было высказано предположение, что глобальная блокировка может быть здесь, но я не уверен, как это сделать.
Есть ли у кого-нибудь указатели на этой арене?
Спасибо!