Improve initialisation
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / runtime / CmsContextImpl.java
index c2d2ccf42d4cdd2814e6c4806d366bf9385d935d..01d285b8cfd2767b8d4252b5cb93cb30861950a9 100644 (file)
@@ -25,19 +25,18 @@ import org.argeo.cms.internal.auth.CmsSessionImpl;
 import org.ietf.jgss.GSSCredential;
 import org.osgi.service.useradmin.UserAdmin;
 
+/** Reference implementation of {@link CmsContext}. */
 public class CmsContextImpl implements CmsContext {
 
        private final CmsLog log = CmsLog.getLog(getClass());
 
        private static CompletableFuture<CmsContextImpl> instance = new CompletableFuture<CmsContextImpl>();
-//     private static CmsContextImpl instance = null;
 
        private CmsState cmsState;
        private CmsDeployment cmsDeployment;
        private UserAdmin userAdmin;
        private UuidFactory uuidFactory;
        private CmsEventBus cmsEventBus;
-//     private ProvidedRepository contentRepository;
 
        // i18n
        private Locale defaultLocale;
@@ -45,6 +44,9 @@ public class CmsContextImpl implements CmsContext {
 
        private Long availableSince;
 
+       // time in ms to wait for CMS to be ready
+       private final long readynessTimeout = 30 * 1000;
+
        // CMS sessions
        private Map<UUID, CmsSessionImpl> cmsSessionsByUuid = new HashMap<>();
        private Map<String, CmsSessionImpl> cmsSessionsByLocalId = new HashMap<>();
@@ -57,16 +59,20 @@ public class CmsContextImpl implements CmsContext {
                defaultLocale = locales.get(0);
 
                new Thread(() -> {
-                       while (!checkReadiness()) {
+                       long begin = System.currentTimeMillis();
+                       long duration = 0;
+                       readyness: while (!checkReadiness()) {
+                               duration = System.currentTimeMillis() - begin;
+                               if (duration > readynessTimeout) {
+                                       log.error("## CMS not ready after " + duration + " ms. Giving up checking.");
+                                       break readyness;
+                               }
                                try {
-                                       Thread.sleep(500);
+                                       Thread.sleep(100);
                                } catch (InterruptedException e) {
                                }
                        }
                }, "Check readiness").start();
-
-               // checkReadiness();
-
                setInstance(this);
        }
 
@@ -178,14 +184,6 @@ public class CmsContextImpl implements CmsContext {
                this.uuidFactory = uuidFactory;
        }
 
-//     public ProvidedRepository getContentRepository() {
-//             return contentRepository;
-//     }
-//
-//     public void setContentRepository(ProvidedRepository contentRepository) {
-//             this.contentRepository = contentRepository;
-//     }
-
        @Override
        public Locale getDefaultLocale() {
                return defaultLocale;
@@ -238,15 +236,6 @@ public class CmsContextImpl implements CmsContext {
        }
 
        private static void setInstance(CmsContextImpl cmsContextImpl) {
-//             if (cmsContextImpl != null) {
-//                     if (instance != null)
-//                             throw new IllegalStateException("CMS Context is already set");
-//                     instance = cmsContextImpl;
-//             } else {
-//                     instance = null;
-//             }
-//             CmsContextImpl.class.notifyAll();
-
                if (cmsContextImpl != null) {
                        if (instance.isDone())
                                throw new IllegalStateException("CMS Context is already set");
@@ -259,15 +248,6 @@ public class CmsContextImpl implements CmsContext {
        }
 
        private static CmsContextImpl getInstance() {
-//             while (instance == null) {
-//                     try {
-//                             CmsContextImpl.class.wait();
-//                     } catch (InterruptedException e) {
-//                             throw new IllegalStateException("Cannot wait for CMS context instance", e);
-//                     }
-//             }
-//             return instance;
-
                try {
                        return instance.get();
                } catch (InterruptedException | ExecutionException e) {