[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:
parent
3526c33271
commit
b7a63c1c47
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -40,4 +40,8 @@ public interface StrolchRealm {
|
|||
public boolean isAuditTrailEnabledForRead();
|
||||
|
||||
public boolean isAuditTrailEnabled();
|
||||
|
||||
public boolean isUpdateObservers();
|
||||
|
||||
public ObserverHandler getObserverHandler();
|
||||
}
|
||||
|
|
|
@ -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);
|
|
@ -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$
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue