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;
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<>();
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);
}
this.uuidFactory = uuidFactory;
}
-// public ProvidedRepository getContentRepository() {
-// return contentRepository;
-// }
-//
-// public void setContentRepository(ProvidedRepository contentRepository) {
-// this.contentRepository = contentRepository;
-// }
-
@Override
public Locale getDefaultLocale() {
return defaultLocale;
}
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");
}
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) {