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]

Reply via email to