All changes done in a Strolch transaction are recorded and then propagated to any registered observers.
+ +The observer feature is opt-in and is configured for each realm. In the StrolchConfiguration.xml
+ file enable observers by adding the enableObserverUpdates
propery per realm:
+<StrolchConfiguration> + <env id="dev"> + ... + <Component> + <name>RealmHandler</name> + <api>li.strolch.agent.api.RealmHandler</api> + <impl>li.strolch.agent.impl.DefaultRealmHandler</impl> + <depends>PrivilegeHandler</depends> + <Properties> + <realms>defaultRealm, otherRealm</realms> + <enableObserverUpdates>true</enableObserverUpdates> + <dataStoreMode>TRANSIENT</dataStoreMode> + <dataStoreFile>StrolchModel.xml</dataStoreFile> + <enableObserverUpdates.otherRealm>true</enableObserverUpdates.otherRealm> + <dataStoreMode.otherRealm>TRANSIENT</dataStoreMode.otherRealm> + <dataStoreFile.otherRealm>StrolchModel.xml</dataStoreFile.otherRealm> + </Properties> + </Component> + </env> + ... +</StrolchConfiguration>+ +
+
Registering for updates is done by registering an Observer
on the ObserverHandler
+ of the realm itself:
+ObserverHandler observerHandler = container.getRealm(StrolchConstants.DEFAULT_REALM).getObserverHandler(); +observerHandler.registerObserver(Tags.RESOURCE, new Observer() { + + @Override + public void update(String key, List<StrolchRootElement> elements) { + logger.info(elements.size() + " resources were updated!"); + } + + @Override + public void remove(String key, List<StrolchRootElement> elements) { + logger.info(elements.size() + " resources were removed!"); + } + + @Override + public void add(String key, List<StrolchRootElement> elements) { + logger.info(elements.size() + " resources were added!"); + } +});+ +
+
Observer updates can be suppressed on the transaction by calling tx.setSuppressUpdates()