diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/BackEndApiImdgConfig.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/BackEndApiImdgConfig.java index 152bc87e5..b43a385db 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/BackEndApiImdgConfig.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/BackEndApiImdgConfig.java @@ -28,9 +28,11 @@ public class BackEndApiImdgConfig { @Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter, BackendApiSettings clientSetting ) { - return new HazelcastService(taskExecutorHazelcastClientInitializer, + ImdgProvider imdg = new HazelcastService(taskExecutorHazelcastClientInitializer, taskExecutorIdGeneratorAwaiter, clientSetting.getHazelcast()); +// todo корректное ожидание готовности imdg.waitAvailable(); + return imdg; } diff --git a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/service/HazelcastServiceBase.java b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/service/HazelcastServiceBase.java index 0fb7b039f..b9c79fa1f 100644 --- a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/service/HazelcastServiceBase.java +++ b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/service/HazelcastServiceBase.java @@ -43,6 +43,9 @@ public abstract class HazelcastServiceBase protected volatile boolean isAvailableNow; private Environment environment; + protected Object lockAvailable; + protected AtomicBoolean hzAvailable; + public HazelcastServiceBase( ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer, ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter, @@ -239,28 +242,32 @@ public abstract class HazelcastServiceBase return imdg; } - @Override - public void waitAvailable() { - Object lock = new Object(); - AtomicBoolean hzAvailable = new AtomicBoolean(); - statusSubscribe(new IHazelcastClusterStatus() { - @Override - public void getAvailable(HazelcastInstance hazelcastNotInited) { - synchronized (lock) { - hzAvailable.set(true); - lock.notifyAll(); + public synchronized void waitAvailable() { + if (lockAvailable == null) { + this.lockAvailable = new Object(); + this.hzAvailable = new AtomicBoolean(); + statusSubscribe(new IHazelcastClusterStatus() { + @Override + public void getAvailable(HazelcastInstance hazelcastNotInited) { + synchronized (lockAvailable) { + hzAvailable.set(true); + lockAvailable.notifyAll(); + } } - } - @Override - public void getUnavailable(HazelcastInstance hazelcastNotInited) { - } - }); - synchronized (lock) { + + @Override + public void getUnavailable(HazelcastInstance hazelcastNotInited) { + } + }); + } + log.debug("Wait IMDG available"); + synchronized (lockAvailable) { try { if (!hzAvailable.get()) { - lock.wait(); + lockAvailable.wait(); } + log.debug("IMDG ready"); } catch (InterruptedException e) { Thread.currentThread().interrupt(); log.error(ExceptionUtils.getStackTrace(e));