X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fosgi%2FCmsActivator.java;h=94b08da4d316a37d7d614c74904c91c09a72ced3;hb=HEAD;hp=d4b2f4595a8b400b0cadf5c8383c80614b0a1dcb;hpb=336930c69f0cd3e1242e518479624c6366541275;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/osgi/CmsActivator.java b/org.argeo.cms/src/org/argeo/cms/internal/osgi/CmsActivator.java index d4b2f4595..94b08da4d 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/osgi/CmsActivator.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/osgi/CmsActivator.java @@ -1,10 +1,10 @@ package org.argeo.cms.internal.osgi; import java.security.AllPermission; -import java.util.Dictionary; -import org.argeo.api.cms.CmsLog; -import org.argeo.cms.ArgeoLogger; +import org.argeo.api.cms.CmsState; +import org.argeo.api.uuid.NodeIdSupplier; +import org.argeo.cms.internal.runtime.CmsStateImpl; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; @@ -13,7 +13,6 @@ 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; /** @@ -21,77 +20,15 @@ import org.osgi.service.permissionadmin.PermissionInfo; * bundle (and only it) */ public class CmsActivator implements BundleActivator { - private final static CmsLog log = CmsLog.getLog(CmsActivator.class); - -// private static Activator instance; +// private final static CmsLog log = CmsLog.getLog(CmsActivator.class); + private final static String PROP_ARGEO_OSGI_PARENT_UUID = "argeo.osgi.parent.uuid"; // TODO make it configurable private boolean hardened = false; private static BundleContext bundleContext; - private LogReaderService logReaderService; - - private CmsOsgiLogger logger; -// private CmsStateImpl nodeState; -// private CmsDeploymentImpl nodeDeployment; -// private CmsContextImpl nodeInstance; - -// private ServiceTracker userAdminSt; - -// static { -// Bundle bundle = FrameworkUtil.getBundle(Activator.class); -// if (bundle != null) { -// bundleContext = bundle.getBundleContext(); -// } -// } - - void init() { -// Runtime.getRuntime().addShutdownHook(new CmsShutdown()); -// instance = this; -// this.bc = bundleContext; - if (bundleContext != null) - this.logReaderService = getService(LogReaderService.class); - initArgeoLogger(); -// this.internalExecutorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); -// -// try { -// initSecurity(); -//// initArgeoLogger(); -// initNode(); -// -// if (log.isTraceEnabled()) -// log.trace("Kernel bundle started"); -// } catch (Throwable e) { -// log.error("## FATAL: CMS activator failed", e); -// } - } - - void destroy() { - try { -// if (nodeInstance != null) -// nodeInstance.shutdown(); -// if (nodeDeployment != null) -// nodeDeployment.shutdown(); -// if (nodeState != null) -// nodeState.shutdown(); -// -// if (userAdminSt != null) -// userAdminSt.close(); - -// internalExecutorService.shutdown(); -// instance = null; - bundleContext = null; - this.logReaderService = null; - // this.configurationAdmin = null; - } catch (Exception e) { - log.error("CMS activator shutdown failed", e); - } - - new GogoShellKiller().start(); - } - - private void initSecurity() { + protected void initSecurity() { // code-level permissions String osgiSecurity = bundleContext.getProperty(Constants.FRAMEWORK_SECURITY); if (osgiSecurity != null && Constants.FRAMEWORK_SECURITY_OSGI.equals(osgiSecurity)) { @@ -127,34 +64,14 @@ public class CmsActivator implements BundleActivator { } - private void initArgeoLogger() { - logger = new CmsOsgiLogger(logReaderService); - if (bundleContext != null) - bundleContext.registerService(ArgeoLogger.class, logger, null); - } - -// private void initNode() throws IOException { -// // Node state -// nodeState = new CmsStateImpl(); -// registerService(CmsState.class, nodeState, null); -// -// // Node deployment -// nodeDeployment = new CmsDeploymentImpl(); -//// registerService(NodeDeployment.class, nodeDeployment, null); +// static void registerService(Class clss, T service, Dictionary properties) { +// if (bundleContext != null) { +// bundleContext.registerService(clss, service, properties); +// } // -// // Node instance -// nodeInstance = new CmsContextImpl(); -// registerService(CmsContext.class, nodeInstance, null); // } - - public static void registerService(Class clss, T service, Dictionary properties) { - if (bundleContext != null) { - bundleContext.registerService(clss, service, properties); - } - - } - - public static T getService(Class clss) { +// + static T getService(Class clss) { if (bundleContext != null) { return bundleContext.getService(bundleContext.getServiceReference(clss)); } else { @@ -169,101 +86,32 @@ public class CmsActivator implements BundleActivator { @Override public void start(BundleContext bc) throws Exception { bundleContext = bc; -// if (!bc.getBundle().equals(bundleContext.getBundle())) -// throw new IllegalStateException( -// "Bundle " + bc.getBundle() + " is not consistent with " + bundleContext.getBundle()); - init(); -// userAdminSt = new ServiceTracker<>(bundleContext, UserAdmin.class, null); -// userAdminSt.open(); - -// ServiceTracker httpSt = new ServiceTracker(bc, HttpService.class, null) { -// -// @Override -// public HttpService addingService(ServiceReference sr) { -// Object httpPort = sr.getProperty("http.port"); -// Object httpsPort = sr.getProperty("https.port"); -// log.info(httpPortsMsg(httpPort, httpsPort)); -// close(); -// return super.addingService(sr); -// } -// }; -// httpSt.open(); - } - - private String httpPortsMsg(Object httpPort, Object httpsPort) { - return (httpPort != null ? "HTTP " + httpPort + " " : " ") + (httpsPort != null ? "HTTPS " + httpsPort : ""); + CmsStateImpl cmsState = new CmsStateImpl(); + cmsState.start(); + bundleContext.registerService(new String[] { CmsState.class.getName(), NodeIdSupplier.class.getName() }, + cmsState, null); } @Override public void stop(BundleContext bc) throws Exception { -// if (!bc.getBundle().equals(bundleContext.getBundle())) -// throw new IllegalStateException( -// "Bundle " + bc.getBundle() + " is not consistent with " + bundleContext.getBundle()); - destroy(); - bundleContext = null; + try { + CmsStateImpl cmsState = (CmsStateImpl) getService(CmsState.class); + String parentFrameworkuuid = bc.getProperty(PROP_ARGEO_OSGI_PARENT_UUID); + if (parentFrameworkuuid == null) + new GogoShellKiller().start(); + cmsState.stop(); + } finally { + bundleContext = null; + } } -// private T getService(Class clazz) { -// ServiceReference sr = bundleContext.getServiceReference(clazz); -// if (sr == null) -// throw new IllegalStateException("No service available for " + clazz); -// return bundleContext.getService(sr); -// } - -// public static GSSCredential getAcceptorCredentials() { -// return getNodeUserAdmin().getAcceptorCredentials(); -// } -// -// @Deprecated -// public static boolean isSingleUser() { -// return getNodeUserAdmin().isSingleUser(); -// } -// -// public static UserAdmin getUserAdmin() { -// return (UserAdmin) getNodeUserAdmin(); -// } -// -// public static String getHttpProxySslHeader() { -// return KernelUtils.getFrameworkProp(CmsConstants.HTTP_PROXY_SSL_DN); -// } -// -// private static NodeUserAdmin getNodeUserAdmin() { -// NodeUserAdmin res; -// try { -// res = instance.userAdminSt.waitForService(60000); -// } catch (InterruptedException e) { -// throw new IllegalStateException("Cannot retrieve Node user admin", e); -// } -// if (res == null) -// throw new IllegalStateException("No Node user admin found"); -// -// return res; -// // ServiceReference sr = -// // instance.bc.getServiceReference(UserAdmin.class); -// // NodeUserAdmin userAdmin = (NodeUserAdmin) instance.bc.getService(sr); -// // return userAdmin; -// -// } - -// public static ExecutorService getInternalExecutorService() { -// return instance.internalExecutorService; -// } - - // static CmsSecurity getCmsSecurity() { - // return instance.nodeSecurity; - // } - -// public String[] getLocales() { -// // TODO optimize? -// List locales = CmsStateImpl.getNodeState().getLocales(); -// String[] res = new String[locales.size()]; -// for (int i = 0; i < locales.size(); i++) -// res[i] = locales.get(i).toString(); -// return res; -// } - - public static BundleContext getBundleContext() { + static BundleContext getBundleContext() { return bundleContext; } + public static String getFrameworkProperty(String key) { + if (bundleContext == null) + return null; + return getBundleContext().getProperty(key); + } }