X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FActivator.java;h=25746a48116b29f84930e93ea7a18272d1199412;hb=35507e18257f2e9f59842ba5120fcd3f19c4cf4d;hp=73c530c82d63d1e0ec31e32cb88da7b47a80157a;hpb=cf53e939cabed54ee2a3074afcf22417fbdf364d;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 73c530c82..25746a481 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,12 +1,15 @@ package org.argeo.cms.internal.kernel; import java.io.IOException; +import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.util.Dictionary; import java.util.List; import java.util.Locale; +import javax.security.auth.login.Configuration; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.cms.CmsException; @@ -22,10 +25,11 @@ import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; import org.osgi.framework.ServiceReference; import org.osgi.service.log.LogReaderService; +import org.osgi.service.useradmin.UserAdmin; /** - * 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); @@ -33,7 +37,7 @@ public class Activator implements BundleActivator { private static Activator instance; private BundleContext bc; - private CmsSecurity nodeSecurity; + // private CmsSecurity nodeSecurity; private LogReaderService logReaderService; // private ConfigurationAdmin configurationAdmin; @@ -44,22 +48,60 @@ public class Activator implements BundleActivator { @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(); + // nodeSecurity = new CmsSecurity(); + initSecurity(); initArgeoLogger(); initNode(); } catch (Exception e) { log.error("## FATAL: CMS activator failed", e); - // throw new CmsException("Cannot initialize node", e); } } + private void initSecurity() { + if (System.getProperty(KernelConstants.JAAS_CONFIG_PROP) == null) { + String jaasConfig = KernelConstants.JAAS_CONFIG; + URL url = getClass().getClassLoader().getResource(jaasConfig); + // System.setProperty(KernelConstants.JAAS_CONFIG_PROP, + // url.toExternalForm()); + KernelUtils.setJaasConfiguration(url); + } + // 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)); + // + } + 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); } @@ -90,14 +132,21 @@ 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(); + + 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) { @@ -112,13 +161,24 @@ public class Activator implements BundleActivator { } public static GSSCredential getAcceptorCredentials() { - return getCmsSecurity().getServerCredentials(); + return getNodeUserAdmin().getAcceptorCredentials(); + } + + public static boolean isSingleUser() { + return getNodeUserAdmin().isSingleUser(); } - static CmsSecurity getCmsSecurity() { - return instance.nodeSecurity; + private static NodeUserAdmin getNodeUserAdmin() { + ServiceReference sr = instance.bc.getServiceReference(UserAdmin.class); + NodeUserAdmin userAdmin = (NodeUserAdmin) instance.bc.getService(sr); + return userAdmin; + } + // static CmsSecurity getCmsSecurity() { + // return instance.nodeSecurity; + // } + public String[] getLocales() { // TODO optimize? List locales = getNodeState().getLocales();