private final BundleContext bc = FrameworkUtil.getBundle(CmsState.class).getBundleContext();
// avoid dependency to RWT OSGi
- private final static String PROPERTY_CONTEXT_NAME="contextName";
-
+ private final static String PROPERTY_CONTEXT_NAME = "contextName";
+
// REFERENCES
private ConfigurationAdmin configurationAdmin;
private boolean cleanState = false;
private URI nodeRepoUri = null;
+ ThreadGroup threadGroup = new ThreadGroup("CMS State");
+ private KernelThread kernelThread;
+
private String hostname;
public CmsState() {
initWebServer();
initNodeDeployment();
- // MetaTypeService metaTypeService =
- // bc.getService(bc.getServiceReference(MetaTypeService.class));
- // MetaTypeInformation metaInfo =
- // metaTypeService.getMetaTypeInformation(bc.getBundle());
- // String[] pids = metaInfo.getPids();
- // for (String pid : pids) {
- // log.debug("MetaType PID : " + pid);
- // ObjectClassDefinition ocd =
- // metaInfo.getObjectClassDefinition(pid, null);
- // log.debug(ocd.getID());
- // for (AttributeDefinition attr :
- // ocd.getAttributeDefinitions(ObjectClassDefinition.ALL)) {
- // log.debug(attr.getID());
- // }
- // }
-
+ // kernel thread
+ kernelThread = new KernelThread(this);
+ kernelThread.setContextClassLoader(getClass().getClassLoader());
+ kernelThread.start();
} catch (Exception e) {
throw new CmsException("Cannot get configuration", e);
}
private void initUi() {
bc.registerService(ApplicationConfiguration.class, new MaintenanceUi(),
LangUtils.init(PROPERTY_CONTEXT_NAME, "system"));
- bc.registerService(ApplicationConfiguration.class, new UserUi(),
- LangUtils.init(PROPERTY_CONTEXT_NAME, "user"));
+ bc.registerService(ApplicationConfiguration.class, new UserUi(), LangUtils.init(PROPERTY_CONTEXT_NAME, "user"));
}
private void initDeployConfigs(Dictionary<String, ?> stateProps) throws IOException {
}
void shutdown() {
+ if (kernelThread != null)
+ kernelThread.destroyAndJoin();
+
if (transactionManager != null)
transactionManager.shutdown();
if (userAdmin != null)
nodeDeployment.setDeployedNodeRepository(nodeRepo.getRepository());
Dictionary<String, Object> props = LangUtils.init(Constants.SERVICE_PID,
NodeConstants.NODE_DEPLOYMENT_PID);
- props.put("uid", nodeRepo.getRootNodeId().toString());
+ props.put(NodeConstants.CN, nodeRepo.getRootNodeId().toString());
// register
bc.registerService(LangUtils.names(NodeDeployment.class, ManagedService.class), nodeDeployment, props);
}
@Override
public void removedService(ServiceReference<HttpService> reference, HttpService service) {
- dataHttp.destroy();
+ if (dataHttp != null)
+ dataHttp.destroy();
dataHttp = null;
+ if (nodeHttp != null)
+ nodeHttp.destroy();
+ nodeHttp = null;
}
private HttpService addHttpService(ServiceReference<HttpService> sr) {
* monitor/control other processes.
*/
class KernelThread extends Thread {
- @SuppressWarnings("unused")
- private final Kernel kernel;
private RepositoryStatisticsImpl repoStats;
/** The smallest period of operation, in ms */
@SuppressWarnings("unused")
private long cycle = 0l;
- public KernelThread(Kernel kernel) {
- super(kernel.threadGroup, kernel.getClass().getSimpleName());
- this.kernel = kernel;
- // this.repoStats = kernel.repository.getRepositoryStatistics();
+ public KernelThread(CmsState cmState) {
+ super(cmState.threadGroup, cmState.getClass().getSimpleName());
}
private void doSmallestPeriod() {