Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorslewis2005-07-06 05:43:57 +0000
committerslewis2005-07-06 05:43:57 +0000
commit2f91acdeff8be71197a0cad3d8fde4a410819917 (patch)
treeac0dd16394aac0b634ac4717e1ae6d74d60aee48
parent58c8755df7d808ff9aa13917758b9070717c4f34 (diff)
downloadorg.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
-rw-r--r--framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/sobject/BaseSharedObject.java54
-rw-r--r--framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/sobject/TransactionEventProcessor.java15
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;
}

Back to the top