+ ServiceReference<NodeState> nodeStateSr = bc.getServiceReference(NodeState.class);
+ if (nodeStateSr == null)
+ throw new CmsException("No node state available");
+
+ NodeState nodeState = bc.getService(nodeStateSr);
+ cleanState = nodeState.isClean();
+
+ nodeHttp = new NodeHttp();
+ initTrackers();
+ }
+
+ private void initTrackers() {
+ new ServiceTracker<NodeHttp, NodeHttp>(bc, NodeHttp.class, null) {
+
+ @Override
+ public NodeHttp addingService(ServiceReference<NodeHttp> reference) {
+ httpAvailable = true;
+ checkReadiness();
+ return super.addingService(reference);
+ }
+ }.open();
+ new RepositoryContextStc().open();
+ new ServiceTracker<UserAdmin, UserAdmin>(bc, UserAdmin.class, null) {
+ @Override
+ public UserAdmin addingService(ServiceReference<UserAdmin> reference) {
+ userAdminAvailable = true;
+ checkReadiness();
+ return super.addingService(reference);
+ }
+ }.open();
+ new ServiceTracker<ConfigurationAdmin, ConfigurationAdmin>(bc, ConfigurationAdmin.class, null) {
+ @Override
+ public ConfigurationAdmin addingService(ServiceReference<ConfigurationAdmin> reference) {
+ ConfigurationAdmin configurationAdmin = bc.getService(reference);
+ 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);
+ log.debug("Standalone repo cn: " + cn);
+ }
+ } catch (Exception e) {
+ throw new CmsException("Cannot initialize config", e);
+ }
+ return super.addingService(reference);
+ }
+ }.open();
+ }
+
+ public void shutdown() {
+ if(nodeHttp!=null)
+ nodeHttp.destroy();
+ if (deployConfig != null)
+ deployConfig.save();
+ }
+
+ private void checkReadiness() {
+ if (nodeAvailable && userAdminAvailable && (httpExpected ? httpAvailable : true)) {
+ availableSince = System.currentTimeMillis();
+ long jvmUptime = ManagementFactory.getRuntimeMXBean().getUptime();
+ log.info("## ARGEO CMS AVAILABLE in " + (jvmUptime / 1000) + "." + (jvmUptime % 1000) + "s ##");
+ long begin = bc.getService(bc.getServiceReference(NodeState.class)).getAvailableSince();
+ long initDuration = System.currentTimeMillis() - begin;
+ if (log.isTraceEnabled())
+ log.trace("Kernel initialization took " + initDuration + "ms");
+ directorsCut(initDuration);
+ }
+ }