X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FActivator.java;h=01e842caa6043326223fe9be65c666975bf4a6c8;hb=44990a14a843b1eac4c0dfca228559c9e86c256b;hp=f6a9b146968d8a7981a37d710fef07e02fc37804;hpb=44728c14306ddf25bb5225496de5f44345fab85d;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 f6a9b1469..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 @@ -1,11 +1,9 @@ package org.argeo.cms.internal.kernel; -import java.awt.image.Kernel; import java.io.IOException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; -import java.security.AllPermission; import java.util.Dictionary; import java.util.List; import java.util.Locale; @@ -15,6 +13,7 @@ import javax.security.auth.login.Configuration; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.cms.CmsException; +import org.argeo.node.ArgeoLogger; import org.argeo.node.NodeConstants; import org.argeo.node.NodeDeployment; import org.argeo.node.NodeInstance; @@ -25,18 +24,13 @@ import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; import org.osgi.framework.ServiceReference; -import org.osgi.service.condpermadmin.BundleLocationCondition; -import org.osgi.service.condpermadmin.ConditionInfo; -import org.osgi.service.condpermadmin.ConditionalPermissionAdmin; -import org.osgi.service.condpermadmin.ConditionalPermissionInfo; -import org.osgi.service.condpermadmin.ConditionalPermissionUpdate; import org.osgi.service.log.LogReaderService; -import org.osgi.service.permissionadmin.PermissionInfo; import org.osgi.service.useradmin.UserAdmin; +import org.osgi.util.tracker.ServiceTracker; /** - * Activates the {@link Kernel} from the provided {@link BundleContext}. Gives - * access to kernel information for the rest of the bundle (and only it) + * Activates the kernel. Gives access to kernel information for the rest of the + * bundle (and only it) */ public class Activator implements BundleActivator { private final static Log log = LogFactory.getLog(Activator.class); @@ -44,30 +38,33 @@ 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 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); - // throw new CmsException("Cannot initialize node", e); } } @@ -82,22 +79,25 @@ public class Activator implements BundleActivator { // explicitly load JAAS configuration Configuration.getConfiguration(); - ConditionalPermissionAdmin permissionAdmin = bc - .getService(bc.getServiceReference(ConditionalPermissionAdmin.class)); - ConditionalPermissionUpdate update = permissionAdmin.newConditionalPermissionUpdate(); - // Self - update.getConditionalPermissionInfos() - .add(permissionAdmin.newConditionalPermissionInfo(null, - new ConditionInfo[] { - new ConditionInfo(BundleLocationCondition.class.getName(), new String[] { "*" }) }, - new PermissionInfo[] { new PermissionInfo(AllPermission.class.getName(), null, null) }, - ConditionalPermissionInfo.ALLOW)); - + // ConditionalPermissionAdmin permissionAdmin = bc + // .getService(bc.getServiceReference(ConditionalPermissionAdmin.class)); + // ConditionalPermissionUpdate update = + // permissionAdmin.newConditionalPermissionUpdate(); + // // Self + // update.getConditionalPermissionInfos() + // .add(permissionAdmin.newConditionalPermissionInfo(null, + // new ConditionInfo[] { + // new ConditionInfo(BundleLocationCondition.class.getName(), new + // String[] { "*" }) }, + // new PermissionInfo[] { new + // PermissionInfo(AllPermission.class.getName(), null, null) }, + // ConditionalPermissionInfo.ALLOW)); + // } private void initArgeoLogger() { - // logger = new NodeLogger(logReaderService); - // bc.registerService(ArgeoLogger.class, logger, null); + logger = new NodeLogger(logReaderService); + bc.registerService(ArgeoLogger.class, logger, null); } private void initNode() throws IOException { @@ -126,14 +126,24 @@ public class Activator implements BundleActivator { @Override public void stop(BundleContext bundleContext) throws Exception { - nodeInstance.shutdown(); - nodeDeployment.shutdown(); - nodeState.shutdown(); - - instance = null; - this.bc = null; - this.logReaderService = null; - // this.configurationAdmin = null; + try { + if (nodeInstance != null) + nodeInstance.shutdown(); + if (nodeDeployment != null) + nodeDeployment.shutdown(); + if (nodeState != null) + nodeState.shutdown(); + + if (userAdminSt != null) + userAdminSt.close(); + + instance = null; + this.bc = null; + this.logReaderService = null; + // this.configurationAdmin = null; + } catch (Exception e) { + log.error("CMS activator shutdown failed", e); + } } private T getService(Class clazz) { @@ -148,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() {