Author: rfeng
Date: Tue Oct 10 23:23:16 2006
New Revision: 462707
URL: http://svn.apache.org/viewvc?view=rev&rev=462707
Log:
Fix an issue in the connector to deal with CompositeReference (w/o binding)
Fix the thread local issue in WorkContextImpl which shares message/correlation
id across threads
Modified:
incubator/tuscany/java/samples/sca/inner.composite/pom.xml
incubator/tuscany/java/samples/sca/inner.composite/src/main/java/innercomposite/SourceImpl.java
incubator/tuscany/java/samples/sca/inner.composite/src/main/java/innercomposite/TargetImpl.java
incubator/tuscany/java/samples/sca/inner.composite/src/test/java/innercomposite/InnerCompositeTestCase.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptor.java
Modified: incubator/tuscany/java/samples/sca/inner.composite/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/inner.composite/pom.xml?view=diff&rev=462707&r1=462706&r2=462707
==============================================================================
--- incubator/tuscany/java/samples/sca/inner.composite/pom.xml (original)
+++ incubator/tuscany/java/samples/sca/inner.composite/pom.xml Tue Oct 10
23:23:16 2006
@@ -34,7 +34,7 @@
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>test</artifactId>
- <version>${sca.version}</version>
+ <version>${tuscanyVersion}</version>
<scope>test</scope>
</dependency>
</dependencies>
Modified:
incubator/tuscany/java/samples/sca/inner.composite/src/main/java/innercomposite/SourceImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/inner.composite/src/main/java/innercomposite/SourceImpl.java?view=diff&rev=462707&r1=462706&r2=462707
==============================================================================
---
incubator/tuscany/java/samples/sca/inner.composite/src/main/java/innercomposite/SourceImpl.java
(original)
+++
incubator/tuscany/java/samples/sca/inner.composite/src/main/java/innercomposite/SourceImpl.java
Tue Oct 10 23:23:16 2006
@@ -28,24 +28,26 @@
private Target targetReference;
private Target targetReference2;
-
+
@Reference
public void setTargetReference(Target target) {
this.targetReference = target;
}
-
+
@Reference
public void setTargetReference2(Target target) {
this.targetReference2 = target;
}
-
+
public void clientMethod(String arg) {
+ System.out.println("Source: " + arg + " -> Source.clientMethod");
targetReference.someMethod(arg + " -> Source.clientMethod");
+
+ System.out.println("Source: " + arg + " => Source.clientMethod");
targetReference2.someMethod(arg + " => Source.clientMethod");
}
-
+
public void receiveResult(String result) {
-
System.out.println("Work thread " + Thread.currentThread());
System.out.println("Result: " + result);
}
Modified:
incubator/tuscany/java/samples/sca/inner.composite/src/main/java/innercomposite/TargetImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/inner.composite/src/main/java/innercomposite/TargetImpl.java?view=diff&rev=462707&r1=462706&r2=462707
==============================================================================
---
incubator/tuscany/java/samples/sca/inner.composite/src/main/java/innercomposite/TargetImpl.java
(original)
+++
incubator/tuscany/java/samples/sca/inner.composite/src/main/java/innercomposite/TargetImpl.java
Tue Oct 10 23:23:16 2006
@@ -25,15 +25,16 @@
@Service(Target.class)
@Scope("MODULE")
public class TargetImpl implements Target {
-
+
private SourceCallback sourceCallback;
-
+
@Callback
public void setSourceCallback(SourceCallback sourceCallback) {
this.sourceCallback = sourceCallback;
}
public void someMethod(String arg) {
+ System.out.println("Target: " + arg);
sourceCallback.receiveResult(arg + " -> Target.someMethod");
}
}
Modified:
incubator/tuscany/java/samples/sca/inner.composite/src/test/java/innercomposite/InnerCompositeTestCase.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/inner.composite/src/test/java/innercomposite/InnerCompositeTestCase.java?view=diff&rev=462707&r1=462706&r2=462707
==============================================================================
---
incubator/tuscany/java/samples/sca/inner.composite/src/test/java/innercomposite/InnerCompositeTestCase.java
(original)
+++
incubator/tuscany/java/samples/sca/inner.composite/src/test/java/innercomposite/InnerCompositeTestCase.java
Tue Oct 10 23:23:16 2006
@@ -23,21 +23,25 @@
import org.osoa.sca.CurrentCompositeContext;
public class InnerCompositeTestCase extends SCATestCase {
-
+
private Source source;
protected void setUp() throws Exception {
+ setApplicationSCDL(Source.class, "META-INF/sca/default.scdl");
super.setUp();
CompositeContext context = CurrentCompositeContext.getContext();
source = context.locateService(Source.class, "SourceComponent");
-}
-
+ }
+
public void test() throws Exception {
-
- System.out.println("Main thread " + Thread.currentThread());
- source.clientMethod("Client.main");
- System.out.println("Sleeping ...");
- Thread.sleep(1000);
+ try {
+ System.out.println("Main thread " + Thread.currentThread());
+ source.clientMethod("Client.main");
+ System.out.println("Sleeping ...");
+ Thread.sleep(1000);
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
}
}
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java?view=diff&rev=462707&r1=462706&r2=462707
==============================================================================
---
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
(original)
+++
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
Tue Oct 10 23:23:16 2006
@@ -92,12 +92,6 @@
continue;
}
try {
- // For a composite reference only, since its outbound
wire comes from its parent composite,
- // the corresponding target would not lie in its
parent but rather in its parent's parent
- if (source instanceof CompositeReference) {
- parent = parent.getParent();
- assert parent != null : "Parent of parent was
null";
- }
SCAObject target;
if (sourceComponent.isSystem()) {
target =
parent.getSystemChild(outboundWire.getTargetName().getPartName());
@@ -138,6 +132,17 @@
OutboundWire outboundWire = reference.getOutboundWire();
// connect the reference's inbound and outbound wires
connect(inboundWire, outboundWire, true);
+
+ if (reference instanceof CompositeReference) {
+ // For a composite reference only, since its outbound wire
comes
+ // from its parent composite,
+ // the corresponding target would not lie in its parent but
+ // rather in its parent's parent
+ parent = parent.getParent();
+ assert parent != null : "Parent of parent was null";
+ SCAObject target =
parent.getChild(outboundWire.getTargetName().getPartName());
+ connect((Component)parent, outboundWire, target);
+ }
} else if (source instanceof Service) {
Service service = (Service) source;
InboundWire inboundWire = service.getInboundWire();
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java?view=diff&rev=462707&r1=462706&r2=462707
==============================================================================
---
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java
(original)
+++
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java
Tue Oct 10 23:23:16 2006
@@ -40,7 +40,12 @@
//A map ( associated with the current thread) of scope identifiers keyed
on the event context id type.
//The scope identifier may be a [EMAIL PROTECTED] ScopeIdentifier} or an
opaque id
- private ThreadLocal<Map<Object, Object>> workContext = new
InheritableThreadLocal<Map<Object, Object>>();
+
+ // [rfeng] We cannot use InheritableThreadLocal for message ids here since
it's shared by parent and children
+ private ThreadLocal<Map<Object, Object>> workContext = new
ThreadLocal<Map<Object, Object>>();
+
+ // [rfeng] Session id requires InheritableThreadLocal
+ private ThreadLocal<Map<Object, Object>> inheritableContext = new
InheritableThreadLocal<Map<Object, Object>>();
public WorkContextImpl() {
super();
@@ -99,7 +104,7 @@
}
public Object getIdentifier(Object type) {
- Map<Object, Object> map = workContext.get();
+ Map<Object, Object> map = inheritableContext.get();
if (map == null) {
return null;
}
@@ -113,10 +118,10 @@
}
public void setIdentifier(Object type, Object identifier) {
- Map<Object, Object> map = workContext.get();
+ Map<Object, Object> map = inheritableContext.get();
if (map == null) {
map = new HashMap<Object, Object>();
- workContext.set(map);
+ inheritableContext.set(map);
}
map.put(type, identifier);
}
@@ -125,14 +130,14 @@
if (type == null) {
return;
}
- Map map = workContext.get();
+ Map map = inheritableContext.get();
if (map != null) {
map.remove(type);
}
}
public void clearIdentifiers() {
- workContext.remove();
+ inheritableContext.remove();
}
}
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java?view=diff&rev=462707&r1=462706&r2=462707
==============================================================================
---
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java
(original)
+++
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java
Tue Oct 10 23:23:16 2006
@@ -20,6 +20,7 @@
import java.util.HashMap;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import org.apache.tuscany.spi.component.SCAObject;
import org.apache.tuscany.spi.component.TargetException;
@@ -46,7 +47,7 @@
private Map<Object, Map<Operation<?>, OutboundInvocationChain>>
callbackSourceChainMaps =
new HashMap<Object, Map<Operation<?>, OutboundInvocationChain>>();
private SCAObject container;
- private Map<Object, Object> msgIdsToAddrs = new HashMap<Object, Object>();
+ private Map<Object, Object> msgIdsToAddrs = new ConcurrentHashMap<Object,
Object>();
public Object getTargetService() throws TargetException {
if (targetWire != null) {
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptor.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptor.java?view=diff&rev=462707&r1=462706&r2=462707
==============================================================================
---
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptor.java
(original)
+++
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptor.java
Tue Oct 10 23:23:16 2006
@@ -63,6 +63,7 @@
workScheduler.scheduleWork(new Runnable() {
public void run() {
workContext.setCurrentMessageId(null);
+ workContext.setCurrentCorrelationId(null);
CompositeContext oldContext =
CurrentCompositeContext.getContext();
try {
BINDER.setContext(currentContext);
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]