[Major] moved ObserverHandler to StrolchRealm - no component anymore

Now the ObserverHandler is not a StrolchComponent anymore, and can be
retrieved from the StrolchRealm. This makes the observer model be part
of the realm, not global of the agent.
This commit is contained in:
Robert von Burg 2014-08-24 19:18:02 +02:00
parent 3526c33271
commit b7a63c1c47
8 changed files with 50 additions and 43 deletions

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package li.strolch.runtime.observer;
package li.strolch.agent.api;
import java.util.List;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package li.strolch.runtime.observer;
package li.strolch.agent.api;
import java.util.List;

View File

@ -40,4 +40,8 @@ public interface StrolchRealm {
public boolean isAuditTrailEnabledForRead();
public boolean isAuditTrailEnabled();
public boolean isUpdateObservers();
public ObserverHandler getObserverHandler();
}

View File

@ -13,41 +13,29 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package li.strolch.runtime.observer;
package li.strolch.agent.impl;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import li.strolch.agent.api.ComponentContainer;
import li.strolch.agent.api.StrolchComponent;
import li.strolch.agent.api.Observer;
import li.strolch.agent.api.ObserverHandler;
import li.strolch.model.StrolchRootElement;
import li.strolch.runtime.configuration.ComponentConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Robert von Burg <eitch@eitchnet.ch>
*
*/
public class DefaultObserverHandler extends StrolchComponent implements ObserverHandler {
public class DefaultObserverHandler implements ObserverHandler {
private static final Logger logger = LoggerFactory.getLogger(DefaultObserverHandler.class);
private Map<String, List<Observer>> observerMap;
@Override
public void initialize(ComponentConfiguration configuration) {
this.observerMap = new HashMap<>();
super.initialize(configuration);
}
/**
* @param container
* @param componentName
*/
public DefaultObserverHandler(ComponentContainer container, String componentName) {
super(container, componentName);
}
@Override
public void add(String key, List<StrolchRootElement> elements) {
List<Observer> observerList = this.observerMap.get(key);

View File

@ -43,6 +43,7 @@ public class DefaultRealmHandler extends StrolchComponent implements RealmHandle
public static final String PROP_ENABLE_AUDIT_TRAIL = "enableAuditTrail"; //$NON-NLS-1$
public static final String PROP_ENABLE_AUDIT_TRAIL_FOR_READ = "enableAuditTrailForRead"; //$NON-NLS-1$
public static final String PROP_ENABLE_OBSERVER_UPDATES = "enableObserverUpdates"; //$NON-NLS-1$
public static final String PREFIX_DATA_STORE_MODE = "dataStoreMode"; //$NON-NLS-1$
public static final String PROP_REALMS = "realms"; //$NON-NLS-1$

View File

@ -27,6 +27,7 @@ import java.util.concurrent.TimeUnit;
import li.strolch.agent.api.AuditTrail;
import li.strolch.agent.api.ComponentContainer;
import li.strolch.agent.api.LockHandler;
import li.strolch.agent.api.ObserverHandler;
import li.strolch.agent.api.OrderMap;
import li.strolch.agent.api.ResourceMap;
import li.strolch.agent.api.StrolchRealm;
@ -51,6 +52,8 @@ public abstract class InternalStrolchRealm implements StrolchRealm {
private LockHandler lockHandler;
private boolean auditTrailEnabled;
private boolean auditTrailEnabledForRead;
private boolean updateObservers;
private ObserverHandler observerHandler;
public InternalStrolchRealm(String realm) {
DBC.PRE.assertNotEmpty("RealmName may not be empty!", realm); //$NON-NLS-1$
@ -86,6 +89,12 @@ public abstract class InternalStrolchRealm implements StrolchRealm {
DefaultRealmHandler.PROP_ENABLE_AUDIT_TRAIL_FOR_READ);
this.auditTrailEnabledForRead = configuration.getBoolean(enableAuditForReadKey, Boolean.FALSE);
String updateObserversKey = DefaultRealmHandler.makeRealmKey(getRealm(),
DefaultRealmHandler.PROP_ENABLE_OBSERVER_UPDATES);
this.updateObservers = configuration.getBoolean(updateObserversKey, Boolean.FALSE);
if (this.updateObservers)
this.observerHandler = new DefaultObserverHandler();
TimeUnit timeUnit = TimeUnit.valueOf(configuration.getString(propTryLockTimeUnit, TimeUnit.SECONDS.name()));
long time = configuration.getLong(propTryLockTime, 10);
logger.info(MessageFormat.format("Using a locking try timeout of {0}s", timeUnit.toSeconds(time))); //$NON-NLS-1$
@ -108,6 +117,19 @@ public abstract class InternalStrolchRealm implements StrolchRealm {
return this.auditTrailEnabledForRead;
}
/**
* @return
*/
@Override
public boolean isUpdateObservers() {
return this.updateObservers;
}
@Override
public ObserverHandler getObserverHandler() {
return this.observerHandler;
}
public abstract void start(PrivilegeContext privilegeContext);
public abstract void stop();
@ -119,4 +141,5 @@ public abstract class InternalStrolchRealm implements StrolchRealm {
public abstract OrderMap getOrderMap();
public abstract AuditTrail getAuditTrail();
}

View File

@ -23,6 +23,7 @@ import java.util.List;
import java.util.Set;
import li.strolch.agent.api.AuditTrail;
import li.strolch.agent.api.ObserverHandler;
import li.strolch.agent.api.OrderMap;
import li.strolch.agent.api.ResourceMap;
import li.strolch.agent.api.StrolchAgent;
@ -56,7 +57,6 @@ import li.strolch.model.timevalue.IValue;
import li.strolch.model.visitor.NoStrategyOrderVisitor;
import li.strolch.model.visitor.NoStrategyResourceVisitor;
import li.strolch.persistence.inmemory.InMemoryTransaction;
import li.strolch.runtime.observer.ObserverHandler;
import li.strolch.service.api.Command;
import org.slf4j.Logger;
@ -75,7 +75,6 @@ public abstract class AbstractTransaction implements StrolchTransaction {
private InternalStrolchRealm realm;
private TransactionCloseStrategy closeStrategy;
private ObserverHandler observerHandler;
private boolean suppressUpdates;
private TransactionResult txResult;
@ -164,14 +163,6 @@ public abstract class AbstractTransaction implements StrolchTransaction {
return this.suppressUpdates;
}
/**
* @param observerHandler
* the observerHandler to set
*/
public void setObserverHandler(ObserverHandler observerHandler) {
this.observerHandler = observerHandler;
}
@Override
public <T extends StrolchRootElement> void lock(T element) {
this.realm.lock(element);
@ -483,18 +474,18 @@ public abstract class AbstractTransaction implements StrolchTransaction {
long observerUpdateStart = System.nanoTime();
ObserverHandler observerHandler = this.realm.getObserverHandler();
if (this.orderMap != null) {
this.observerHandler.add(Tags.ORDER, new ArrayList<StrolchRootElement>(this.orderMap.getCreated()));
this.observerHandler.update(Tags.ORDER, new ArrayList<StrolchRootElement>(this.orderMap.getUpdated()));
this.observerHandler.remove(Tags.ORDER, new ArrayList<StrolchRootElement>(this.orderMap.getDeleted()));
observerHandler.add(Tags.ORDER, new ArrayList<StrolchRootElement>(this.orderMap.getCreated()));
observerHandler.update(Tags.ORDER, new ArrayList<StrolchRootElement>(this.orderMap.getUpdated()));
observerHandler.remove(Tags.ORDER, new ArrayList<StrolchRootElement>(this.orderMap.getDeleted()));
}
if (this.resourceMap != null) {
this.observerHandler.add(Tags.RESOURCE, new ArrayList<StrolchRootElement>(this.resourceMap.getCreated()));
this.observerHandler
.update(Tags.RESOURCE, new ArrayList<StrolchRootElement>(this.resourceMap.getUpdated()));
this.observerHandler
.remove(Tags.RESOURCE, new ArrayList<StrolchRootElement>(this.resourceMap.getDeleted()));
observerHandler.add(Tags.RESOURCE, new ArrayList<StrolchRootElement>(this.resourceMap.getCreated()));
observerHandler.update(Tags.RESOURCE, new ArrayList<StrolchRootElement>(this.resourceMap.getUpdated()));
observerHandler.remove(Tags.RESOURCE, new ArrayList<StrolchRootElement>(this.resourceMap.getDeleted()));
}
long observerUpdateDuration = System.nanoTime() - observerUpdateStart;
@ -502,7 +493,7 @@ public abstract class AbstractTransaction implements StrolchTransaction {
}
private boolean isObserverUpdatesEnabled() {
return this.suppressUpdates || this.observerHandler == null;
return this.suppressUpdates || this.realm.isUpdateObservers();
}
private long writeAuditTrail() {

View File

@ -15,9 +15,9 @@
*/
package li.strolch.runtime;
import li.strolch.agent.api.ObserverHandler;
import li.strolch.model.StrolchModelConstants;
import li.strolch.persistence.api.PersistenceHandler;
import li.strolch.runtime.observer.ObserverHandler;
/**
* @author Robert von Burg <eitch@eitchnet.ch>