diff options
| author | slewis | 2005-07-06 05:43:57 +0000 |
|---|---|---|
| committer | slewis | 2005-07-06 05:43:57 +0000 |
| commit | 2f91acdeff8be71197a0cad3d8fde4a410819917 (patch) | |
| tree | ac0dd16394aac0b634ac4717e1ae6d74d60aee48 | |
| parent | 58c8755df7d808ff9aa13917758b9070717c4f34 (diff) | |
| download | org.eclipse.ecf-2f91acdeff8be71197a0cad3d8fde4a410819917.tar.gz org.eclipse.ecf-2f91acdeff8be71197a0cad3d8fde4a410819917.tar.xz org.eclipse.ecf-2f91acdeff8be71197a0cad3d8fde4a410819917.zip | |
Fixed handling of commit message in TransactionEventProcessor and BaseSharedObject
2 files changed, 55 insertions, 14 deletions
diff --git a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/sobject/BaseSharedObject.java b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/sobject/BaseSharedObject.java index 8a2d9ac67..e69e99c73 100644 --- a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/sobject/BaseSharedObject.java +++ b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/sobject/BaseSharedObject.java @@ -36,11 +36,13 @@ import org.eclipse.ecf.provider.Trace; */ public class BaseSharedObject implements ISharedObject, IIdentifiable { + protected static final String TRANSACTIONAL_SUFFIX = ".transactional"; private static long identifier = 0L; Trace trace = Trace.create("basesharedobject"); ISharedObjectConfig config = null; List eventProcessors = new Vector(); + Boolean transactional = null; protected static long getIdentifier() { return identifier++; @@ -86,29 +88,57 @@ public class BaseSharedObject implements ISharedObject, IIdentifiable { */ public void init(ISharedObjectConfig initData) throws SharedObjectInitException { - trace("init("+initData+")"); this.config = initData; + trace("init("+initData+")"); + Map props = config.getProperties(); + Object o = props.get(this.getClass().getName()+TRANSACTIONAL_SUFFIX); + if (o instanceof Boolean) { + Boolean b = (Boolean) o; + if (b != null && b.booleanValue()) { + // transactional... + new TwoPhaseCommit(this); + } + } + } protected ISharedObjectConfig getConfig() { return config; } protected ISharedObjectContext getContext() { - return getConfig().getContext(); + ISharedObjectConfig c = getConfig(); + if (c == null) { + return null; + } else return config.getContext(); } protected ID getHomeID() { - return getConfig().getHomeContainerID(); + ISharedObjectConfig conf = getConfig(); + if (conf == null) return null; + else return conf.getHomeContainerID(); } protected ID getLocalID() { - return getContext().getLocalContainerID(); + ISharedObjectContext context = getContext(); + if (context == null) { + return null; + } else return context.getLocalContainerID(); } protected ID getGroupID() { - return getContext().getGroupID(); + ISharedObjectContext context = getContext(); + if (context == null) { + return null; + } else return context.getGroupID(); } protected boolean isPrimary() { - return (getLocalID().equals(getHomeID())); + ID local = getLocalID(); + ID home = getHomeID(); + if (local == null || home == null) { + return false; + } else return (local.equals(home)); } protected Map getProperties() { - return getConfig().getProperties(); + ISharedObjectConfig config = getConfig(); + if (config == null) { + return null; + } else return config.getProperties(); } /* (non-Javadoc) * @see org.eclipse.ecf.core.ISharedObject#handleEvent(org.eclipse.ecf.core.util.Event) @@ -141,6 +171,7 @@ public class BaseSharedObject implements ISharedObject, IIdentifiable { */ public Object getAdapter(Class clazz) { if (clazz.equals(ISharedObjectContainerTransaction.class)) { + transactional = new Boolean(true); return new TwoPhaseCommit(this); } return null; @@ -150,7 +181,10 @@ public class BaseSharedObject implements ISharedObject, IIdentifiable { * @see org.eclipse.ecf.core.IIdentifiable#getID() */ public ID getID() { - return getConfig().getSharedObjectID(); + ISharedObjectConfig conf = getConfig(); + if (conf == null) { + return null; + } else return conf.getSharedObjectID(); } public void destroySelf() { if (isPrimary()) { @@ -211,8 +245,10 @@ public class BaseSharedObject implements ISharedObject, IIdentifiable { } } protected SharedObjectDescription getReplicaDescription(ID receiver) { + Map props = getConfig().getProperties(); + props.put(this.getClass().getName()+TRANSACTIONAL_SUFFIX,transactional); return new SharedObjectDescription(getID(), getClass().getName(), - getConfig().getProperties(), getIdentifier()); + props, getIdentifier()); } diff --git a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/sobject/TransactionEventProcessor.java b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/sobject/TransactionEventProcessor.java index 5aa1bdcd4..fbb24e440 100644 --- a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/sobject/TransactionEventProcessor.java +++ b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/sobject/TransactionEventProcessor.java @@ -24,6 +24,7 @@ import org.eclipse.ecf.core.events.ISharedObjectCommitEvent; import org.eclipse.ecf.core.events.ISharedObjectContainerDepartedEvent; import org.eclipse.ecf.core.events.ISharedObjectContainerJoinedEvent; import org.eclipse.ecf.core.events.ISharedObjectCreateResponseEvent; +import org.eclipse.ecf.core.events.ISharedObjectMessageEvent; import org.eclipse.ecf.core.events.SharedObjectCommitEvent; import org.eclipse.ecf.core.identity.ID; import org.eclipse.ecf.core.util.Event; @@ -61,7 +62,7 @@ public class TransactionEventProcessor implements IEventProcessor { protected void trace(String msg) { if (Trace.ON && trace != null) { trace.msg(getSharedObject().getID() + ":" - + (getSharedObject().isPrimary() ? "primary" : "replica") + + (getSharedObject().isPrimary() ? "primary:" : "replica:") + msg); } } @@ -157,10 +158,14 @@ public class TransactionEventProcessor implements IEventProcessor { trace("handleDeparted(" + event + ")"); handleDeparted((ISharedObjectContainerDepartedEvent) event); return event; - } else if (event instanceof ISharedObjectCommitEvent) { - trace("localCommitted(" + event + ")"); - localCommitted(); - return event; + } else if (event instanceof ISharedObjectMessageEvent) { + ISharedObjectMessageEvent some = (ISharedObjectMessageEvent) event; + Object data = some.getData(); + if (data instanceof ISharedObjectCommitEvent) { + trace("localCommitted(" + event + ")"); + localCommitted(); + return event; + } } return event; } |
