X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FActivator.java;h=24c2f6bccc7d1c7e9d8e004f94d56623e92513dc;hb=18af628c072e386420f03261ab207a72341a0a1b;hp=6aacfd4931760f6e9c85f8d1724f35cfccf55dca;hpb=2d6b7c0c3badea29451c4d8e41ebb5aca2258806;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 6aacfd493..24c2f6bcc 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 @@ -2,27 +2,27 @@ 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.Hashtable; 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; import org.argeo.node.ArgeoLogger; import org.argeo.node.NodeConstants; import org.argeo.node.NodeDeployment; +import org.argeo.node.NodeInstance; import org.argeo.node.NodeState; import org.argeo.util.LangUtils; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; import org.osgi.framework.ServiceReference; -import org.osgi.service.cm.Configuration; -import org.osgi.service.cm.ConfigurationAdmin; -import org.osgi.service.cm.ManagedService; -import org.osgi.service.condpermadmin.ConditionalPermissionAdmin; import org.osgi.service.log.LogReaderService; /** @@ -30,122 +30,85 @@ import org.osgi.service.log.LogReaderService; * access to kernel information for the rest of the bundle (and only it) */ public class Activator implements BundleActivator { - // public final static String SYSTEM_KEY_PROPERTY = - // "argeo.security.systemKey"; - private final Log log = LogFactory.getLog(Activator.class); - - // private final static String systemKey; - // static { - // System.setProperty(SYSTEM_KEY_PROPERTY, systemKey); - // } + private final static Log log = LogFactory.getLog(Activator.class); - // private static Kernel kernel; private static Activator instance; private BundleContext bc; - private ConditionalPermissionAdmin permissionAdmin; private LogReaderService logReaderService; - private ConfigurationAdmin configurationAdmin; + // private ConfigurationAdmin configurationAdmin; private NodeLogger logger; private CmsState nodeState; private CmsDeployment nodeDeployment; + private CmsInstance nodeInstance; @Override public void start(BundleContext bundleContext) throws Exception { - // try { - // kernel = new Kernel(); - // kernel.init(); - // } catch (Exception e) { - // log.error("Cannot boot kernel", e); - // } - instance = this; this.bc = bundleContext; - this.permissionAdmin = getService(ConditionalPermissionAdmin.class); this.logReaderService = getService(LogReaderService.class); - this.configurationAdmin = getService(ConfigurationAdmin.class); + // this.configurationAdmin = getService(ConfigurationAdmin.class); - initSecurity();// must be first - initArgeoLogger(); - initNodeState(); + try { + initSecurity();// must be first + initArgeoLogger(); + initNode(); + } catch (Exception e) { + log.error("## FATAL: CMS activator failed", e); + // throw new CmsException("Cannot initialize node", e); + } } private void initSecurity() { - URL url = getClass().getClassLoader().getResource(KernelConstants.JAAS_CONFIG); - System.setProperty("java.security.auth.login.config", url.toExternalForm()); + if (System.getProperty(KernelConstants.JAAS_CONFIG_PROP) == null) { + URL url = getClass().getClassLoader().getResource(KernelConstants.JAAS_CONFIG); + // URL url = + // getClass().getClassLoader().getResource(KernelConstants.JAAS_CONFIG_IPA); + System.setProperty(KernelConstants.JAAS_CONFIG_PROP, url.toExternalForm()); + } + Configuration.getConfiguration(); } private void initArgeoLogger() { logger = new NodeLogger(logReaderService); - - // register bc.registerService(ArgeoLogger.class, logger, null); } - private void initNodeState() throws IOException { - nodeState = new CmsState(); - - Object cn; - Configuration nodeConf = configurationAdmin.getConfiguration(NodeConstants.NODE_STATE_PID); - Dictionary props = nodeConf.getProperties(); - if (props == null) { - if (log.isDebugEnabled()) - log.debug("Clean node state"); - Dictionary envProps = new Hashtable<>(); - // Use the UUID of the first framework run as state UUID - cn = bc.getProperty(Constants.FRAMEWORK_UUID); - envProps.put(NodeConstants.CN, cn); - nodeConf.update(envProps); + private void initNode() throws IOException { + // Node state + Path stateUuidPath = bc.getDataFile("stateUuid").toPath(); + String stateUuid; + if (Files.exists(stateUuidPath)) { + stateUuid = Files.readAllLines(stateUuidPath).get(0); } else { - // Check if state is in line with environment - // Dictionary envProps = new Hashtable<>(); - // for (String key : LangUtils.keys(envProps)) { - // Object envValue = envProps.get(key); - // Object storedValue = props.get(key); - // if (storedValue == null) - // throw new CmsException("No state value for env " + key + "=" + - // envValue - // + ", please clean the OSGi configuration."); - // if (!storedValue.equals(envValue)) - // throw new CmsException("State value for " + key + "=" + - // storedValue - // + " is different from env value =" + envValue + ", please clean - // the OSGi configuration."); - // } - cn = props.get(NodeConstants.CN); - if (cn == null) - throw new CmsException("No state UUID available"); - } - - Dictionary regProps = LangUtils.init(Constants.SERVICE_PID, NodeConstants.NODE_STATE_PID); - regProps.put(NodeConstants.CN, cn); - bc.registerService(LangUtils.names(NodeState.class, ManagedService.class), nodeState, regProps); - - try { - nodeDeployment = new CmsDeployment(); - bc.registerService(LangUtils.names(NodeDeployment.class), nodeDeployment, null); - } catch (RuntimeException e) { - e.printStackTrace(); - throw e; + stateUuid = bc.getProperty(Constants.FRAMEWORK_UUID); + Files.write(stateUuidPath, stateUuid.getBytes()); } + nodeState = new CmsState(stateUuid); + Dictionary regProps = LangUtils.dico(Constants.SERVICE_PID, NodeConstants.NODE_STATE_PID); + regProps.put(NodeConstants.CN, stateUuid); + bc.registerService(NodeState.class, nodeState, regProps); + + // Node deployment + nodeDeployment = new CmsDeployment(); + bc.registerService(NodeDeployment.class, nodeDeployment, null); + + // Node instance + nodeInstance = new CmsInstance(); + bc.registerService(NodeInstance.class, nodeInstance, null); } @Override public void stop(BundleContext bundleContext) throws Exception { + nodeInstance.shutdown(); + nodeDeployment.shutdown(); nodeState.shutdown(); instance = null; this.bc = null; - this.permissionAdmin = null; this.logReaderService = null; - this.configurationAdmin = null; - - // if (kernel != null) { - // kernel.destroy(); - // kernel = null; - // } - + // this.configurationAdmin = null; } private T getService(Class clazz) {