public void storeMeemDefinition(MeemPath meemPath, MeemDefinition meemDefinition) { if (DEBUG) { logger.info("storing meem def: " + meemPath); } // only store meemstore paths if (meemPath.getSpace().equals(Space.MEEMSTORE)) { int meemVersion = meemDefinition.getMeemAttribute().getVersion(); if (meemVersion > definitionStore.getVersion(meemPath)) { definitionStore.store(meemPath, meemDefinition); synchronized (meemPaths) { if (!meemPaths.containsKey(meemPath.getLocation())) { meemPaths.put(meemPath.getLocation(), meemPath); meemStoreClient.meemStored(meemPath); } meemDefinitionClient.meemDefinitionChanged(meemPath, meemDefinition); meemContentClient.meemContentChanged(meemPath, null); } } else { // definition version number is same or smaller than the persisted one // LogTools.warn(logger, "Request to persist MeemDefinition with lower version number than // most recent version"); } } }
private void startStores(Properties properties) { String definitionStoreClassName = properties.getProperty(DEFINITION_STORE_CLASS); String contentStoreClassName = properties.getProperty(CONTENT_STORE_CLASS); // start definition store try { Class<?> definitionStoreClass = Class.forName(definitionStoreClassName); definitionStore = (MeemStoreDefinitionStore) definitionStoreClass.newInstance(); } catch (Exception e) { logger.log(Level.INFO, "Exception while starting MeemStoreDefinitionStore", e); } if (definitionStore != null) definitionStore.configure(this, properties); // start content store try { Class<?> contentStoreClass = Class.forName(contentStoreClassName); contentStore = (MeemStoreContentStore) contentStoreClass.newInstance(); } catch (Exception e) { logger.log(Level.INFO, "Exception while starting MeemStoreContentStore", e); } if (contentStore != null) contentStore.configure(this, properties); }
public void destroyMeem(MeemPath meemPath) { String location = meemPath.getLocation(); MeemPath removePath; synchronized (meemPaths) { removePath = (MeemPath) meemPaths.remove(location); if (removePath != null) { contentStore.remove(meemPath); definitionStore.remove(meemPath); meemStoreClient.meemDestroyed(meemPath); meemDefinitionClient.meemDefinitionChanged(meemPath, null); meemContentClient.meemContentChanged(meemPath, null); } } }
public void commence() { Properties properties = System.getProperties(); // TODO put this in a commence() method, and close stores on conclude(). startStores(properties); // grab the content and definition paths // it is possible to have a content stored without a definition and vice versa // -mg- not sure this is really necessary. should just hand off to store to try and // load and fail silently if path cannot be found HashSet<MeemPath> paths = new HashSet<MeemPath>(); paths.addAll(contentStore.getAllPaths()); paths.addAll(definitionStore.getAllPaths()); for (MeemPath meemPath : paths) { meemPaths.put(meemPath.getLocation(), meemPath); } }