X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FCmsDeployment.java;h=28e2ef9387bb121759b7eca6fc3ec5410d565210;hb=6ecc30c54a64fb658aa7949349b05d655ff386a8;hp=6faa4c9e2ee2e36ed69150949ab5e528548d3ecf;hpb=02a6354c17ddb160513580e9e3c7826d9475b177;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsDeployment.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsDeployment.java index 6faa4c9e2..28e2ef938 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsDeployment.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsDeployment.java @@ -28,6 +28,7 @@ import org.argeo.node.NodeConstants; import org.argeo.node.NodeDeployment; import org.argeo.node.NodeState; import org.argeo.node.security.CryptoKeyring; +import org.argeo.osgi.useradmin.UserAdminConf; import org.argeo.util.LangUtils; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; @@ -102,11 +103,27 @@ public class CmsDeployment implements NodeDeployment { deployConfig = new DeployConfig(configurationAdmin, cleanState); httpExpected = deployConfig.getProps(KernelConstants.JETTY_FACTORY_PID, "default") != null; try { + // Configuration[] configs = configurationAdmin + // .listConfigurations("(service.factoryPid=" + + // NodeConstants.NODE_REPOS_FACTORY_PID + ")"); + // for (Configuration config : configs) { + // Object cn = config.getProperties().get(NodeConstants.CN); + // if (log.isDebugEnabled()) + // log.debug("Standalone repo cn: " + cn); + // } Configuration[] configs = configurationAdmin - .listConfigurations("(service.factoryPid=" + NodeConstants.NODE_REPOS_FACTORY_PID + ")"); + .listConfigurations("(service.factoryPid=" + NodeConstants.NODE_USER_ADMIN_PID + ")"); + + boolean hasDomain = false; for (Configuration config : configs) { - Object cn = config.getProperties().get(NodeConstants.CN); - log.debug("Standalone repo cn: " + cn); + Object realm = config.getProperties().get(UserAdminConf.realm.name()); + if (realm != null) { + log.debug("Found realm: " + realm); + hasDomain = true; + } + } + if (hasDomain) { + loadIpaJaasConfiguration(); } } catch (Exception e) { throw new CmsException("Cannot initialize config", e); @@ -116,8 +133,17 @@ public class CmsDeployment implements NodeDeployment { }.open(); } + private void loadIpaJaasConfiguration() { + if (System.getProperty(KernelConstants.JAAS_CONFIG_PROP) == null) { + String jaasConfig = KernelConstants.JAAS_CONFIG_IPA; + URL url = getClass().getClassLoader().getResource(jaasConfig); + KernelUtils.setJaasConfiguration(url); + log.debug("Set IPA JAAS configuration."); + } + } + public void shutdown() { - if(nodeHttp!=null) + if (nodeHttp != null) nodeHttp.destroy(); if (deployConfig != null) deployConfig.save(); @@ -132,25 +158,25 @@ public class CmsDeployment implements NodeDeployment { long initDuration = System.currentTimeMillis() - begin; if (log.isTraceEnabled()) log.trace("Kernel initialization took " + initDuration + "ms"); - directorsCut(initDuration); + tributeToFreeSoftware(initDuration); } } - final private void directorsCut(long initDuration) { - // final long ms = 128l + (long) (Math.random() * 128d); - long ms = initDuration / 100; - log.info("Spend " + ms + "ms" + " reflecting on the progress brought to mankind" + " by Free Software..."); - long beginNano = System.nanoTime(); - try { - Thread.sleep(ms, 0); - } catch (InterruptedException e) { - // silent + final private void tributeToFreeSoftware(long initDuration) { + if (log.isTraceEnabled()) { + long ms = initDuration / 100; + log.trace("Spend " + ms + "ms" + " reflecting on the progress brought to mankind" + " by Free Software..."); + long beginNano = System.nanoTime(); + try { + Thread.sleep(ms, 0); + } catch (InterruptedException e) { + // silent + } + long durationNano = System.nanoTime() - beginNano; + final double M = 1000d * 1000d; + double sleepAccuracy = ((double) durationNano) / (ms * M); + log.trace("Sleep accuracy: " + String.format("%.2f", 100 - (sleepAccuracy * 100 - 100)) + " %"); } - long durationNano = System.nanoTime() - beginNano; - final double M = 1000d * 1000d; - double sleepAccuracy = ((double) durationNano) / (ms * M); - if (log.isDebugEnabled()) - log.debug("Sleep accuracy: " + String.format("%.2f", 100 - (sleepAccuracy * 100 - 100)) + " %"); } private void prepareNodeRepository(Repository deployedNodeRepository) { @@ -209,11 +235,11 @@ public class CmsDeployment implements NodeDeployment { } List capabilities = wiring.getCapabilities(CMS_DATA_MODEL_NAMESPACE); for (BundleCapability capability : capabilities) { - registerCnd(adminSession, capability, processed); + registerDataModelCapability(adminSession, capability, processed); } } - private void registerCnd(Session adminSession, BundleCapability capability, Set processed) { + private void registerDataModelCapability(Session adminSession, BundleCapability capability, Set processed) { Map attrs = capability.getAttributes(); String name = (String) attrs.get(DataModelNamespace.CAPABILITY_NAME_ATTRIBUTE); if (processed.contains(name)) { @@ -221,15 +247,21 @@ public class CmsDeployment implements NodeDeployment { log.trace("Data model " + name + " has already been processed"); return; } + + // CND String path = (String) attrs.get(DataModelNamespace.CAPABILITY_CND_ATTRIBUTE); - URL url = capability.getRevision().getBundle().getResource(path); - try (Reader reader = new InputStreamReader(url.openStream())) { - CndImporter.registerNodeTypes(reader, adminSession, true); - processed.add(name); - if (log.isDebugEnabled()) - log.debug("Registered CND " + url); - } catch (Exception e) { - throw new CmsException("Cannot import CND " + url, e); + if (path != null) { + URL url = capability.getRevision().getBundle().getResource(path); + if (url == null) + throw new CmsException("No data model '" + name + "' found under path " + path); + try (Reader reader = new InputStreamReader(url.openStream())) { + CndImporter.registerNodeTypes(reader, adminSession, true); + processed.add(name); + if (log.isDebugEnabled()) + log.debug("Registered CND " + url); + } catch (Exception e) { + throw new CmsException("Cannot import CND " + url, e); + } } if (!asBoolean((String) attrs.get(DataModelNamespace.CAPABILITY_ABSTRACT_ATTRIBUTE))) {