X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FActivator.java;h=01e842caa6043326223fe9be65c666975bf4a6c8;hb=c79f5f2275dbbeb7407befc0188344ac16a87a80;hp=e7dcfc1a2ddbe7c2a95cd5c71865c881710dd1ad;hpb=4a9b0e61d44c296d131b774c4b5c52d528c523bd;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/Activator.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/Activator.java index e7dcfc1a2..01e842caa 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/Activator.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/Activator.java @@ -26,6 +26,7 @@ import org.osgi.framework.Constants; import org.osgi.framework.ServiceReference; import org.osgi.service.log.LogReaderService; import org.osgi.service.useradmin.UserAdmin; +import org.osgi.util.tracker.ServiceTracker; /** * Activates the kernel. Gives access to kernel information for the rest of the @@ -37,29 +38,32 @@ public class Activator implements BundleActivator { private static Activator instance; private BundleContext bc; - // private CmsSecurity nodeSecurity; + private LogReaderService logReaderService; - // private ConfigurationAdmin configurationAdmin; private NodeLogger logger; private CmsState nodeState; private CmsDeployment nodeDeployment; private CmsInstance nodeInstance; + private ServiceTracker userAdminSt; + @Override public void start(BundleContext bundleContext) throws Exception { Runtime.getRuntime().addShutdownHook(new CmsShutdown()); instance = this; this.bc = bundleContext; this.logReaderService = getService(LogReaderService.class); - // this.configurationAdmin = getService(ConfigurationAdmin.class); try { - // nodeSecurity = new CmsSecurity(); initSecurity(); initArgeoLogger(); initNode(); - } catch (Exception e) { + + userAdminSt = new ServiceTracker<>(instance.bc, UserAdmin.class, null); + userAdminSt.open(); + log.debug("Kernel bundle started"); + } catch (Throwable e) { log.error("## FATAL: CMS activator failed", e); } } @@ -92,16 +96,6 @@ public class Activator implements BundleActivator { } private void initArgeoLogger() { - // Jetty - // disable integration of Jetty logging with SLF4J - // in order to avoid chicken and egg problems - // org.eclipse.jetty.util.log.Log.setLog(new StdErrLog()); - // org.eclipse.jetty.util.log.Logger jettyLog = - // org.eclipse.jetty.util.log.Log.getLog(); - // if (jettyLog != null) { - // jettyLog.warn("TEST JETTY LOG", new Object[0]); - // } - logger = new NodeLogger(logReaderService); bc.registerService(ArgeoLogger.class, logger, null); } @@ -140,6 +134,9 @@ public class Activator implements BundleActivator { if (nodeState != null) nodeState.shutdown(); + if (userAdminSt != null) + userAdminSt.close(); + instance = null; this.bc = null; this.logReaderService = null; @@ -161,9 +158,33 @@ public class Activator implements BundleActivator { } public static GSSCredential getAcceptorCredentials() { - ServiceReference sr = instance.bc.getServiceReference(UserAdmin.class); - NodeUserAdmin userAdmin = (NodeUserAdmin) instance.bc.getService(sr); - return userAdmin.getAcceptorCredentials(); + return getNodeUserAdmin().getAcceptorCredentials(); + } + + public static boolean isSingleUser() { + return getNodeUserAdmin().isSingleUser(); + } + + public static UserAdmin getUserAdmin() { + return (UserAdmin) getNodeUserAdmin(); + } + + private static NodeUserAdmin getNodeUserAdmin() { + NodeUserAdmin res; + try { + res = instance.userAdminSt.waitForService(60000); + } catch (InterruptedException e) { + throw new CmsException("Cannot retrieve Node user admin", e); + } + if (res == null) + throw new CmsException("No Node user admin found"); + + return res; + // ServiceReference sr = + // instance.bc.getServiceReference(UserAdmin.class); + // NodeUserAdmin userAdmin = (NodeUserAdmin) instance.bc.getService(sr); + // return userAdmin; + } // static CmsSecurity getCmsSecurity() {