+ 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);
+
+ initSecurity();// must be first
+ initArgeoLogger();
+ initNodeState();
+ }
+
+ private void initSecurity() {
+ URL url = getClass().getClassLoader().getResource(KernelConstants.JAAS_CONFIG);
+ System.setProperty("java.security.auth.login.config", url.toExternalForm());
+ }
+
+ 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<String, Object> props = nodeConf.getProperties();
+ if (props == null) {
+ if (log.isDebugEnabled())
+ log.debug("Clean node state");
+ Dictionary<String, Object> envProps = getStatePropertiesFromEnvironment();
+ // 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);
+ } else {
+ // Check if state is in line with environment
+ Dictionary<String, Object> envProps = getStatePropertiesFromEnvironment();
+ 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");