You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jm...@apache.org on 2007/01/10 22:00:27 UTC

svn commit: r494980 - in /incubator/tuscany/java/sca/kernel/core/src: main/java/org/apache/tuscany/core/builder/ConnectorImpl.java main/java/org/apache/tuscany/core/wire/WireUtils.java test/java/org/apache/tuscany/core/wire/WireOptimizationTestCase.java

Author: jmarino
Date: Wed Jan 10 13:00:26 2007
New Revision: 494980

URL: http://svn.apache.org/viewvc?view=rev&rev=494980
Log:
move wire optimization algorithm out of Connector so the latter is no free of AtomicComponent specializations

Modified:
    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/wire/WireUtils.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/WireOptimizationTestCase.java

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=494980&r1=494979&r2=494980
==============================================================================
--- 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 Wed Jan 10 13:00:26 2007
@@ -28,7 +28,6 @@
 import org.apache.tuscany.spi.builder.Connector;
 import org.apache.tuscany.spi.builder.MissingWireTargetException;
 import org.apache.tuscany.spi.builder.WiringException;
-import org.apache.tuscany.spi.component.AtomicComponent;
 import org.apache.tuscany.spi.component.Component;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.component.Reference;
@@ -116,15 +115,10 @@
             // run wire post-processors
             postProcessorRegistry.process(sourceWire, targetWire);
         }
-        // perform optimization, if possible. Atomic component's do not have outbound target wires, but keep the check
-        // perform optimization, if possible. Note that optimizations on stateless targets are not performed if they
-        // receive destroy events since a destruction notification must be given through a proxy
         if (optimizable
             && WireUtils.isOptimizable(sourceWire)
-            && WireUtils.isOptimizable(targetWire)
-            && targetWire.getContainer() instanceof AtomicComponent
-            && targetWire.getContainer().getScope() == Scope.STATELESS
-            && !((AtomicComponent) targetWire.getContainer()).isDestroyable()) {
+            && WireUtils.isOptimizable(targetWire)) {
+            sourceWire.setOptimizable(true);
             sourceWire.setTargetWire(targetWire);
         }
     }
@@ -289,14 +283,10 @@
             // run wire post-processors
             postProcessorRegistry.process(sourceWire, targetWire);
         }
-        // perform optimization, if possible. Note that optimizations on stateless targets are not performed if they
-        // receive destroy events since a destruction notification must be given through a proxy
+        // perform optimization, if possible
         if (optimizable
             && WireUtils.isOptimizable(sourceWire)
-            && WireUtils.isOptimizable(targetWire)
-            && targetWire.getContainer() instanceof AtomicComponent
-            && targetWire.getContainer().getScope() == Scope.STATELESS
-            && !((AtomicComponent) targetWire.getContainer()).isDestroyable()) {
+            && WireUtils.isOptimizable(targetWire)) {
             sourceWire.setOptimizable(true);
             sourceWire.setTargetWire(targetWire);
         }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireUtils.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireUtils.java?view=diff&rev=494980&r1=494979&r2=494980
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireUtils.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireUtils.java Wed Jan 10 13:00:26 2007
@@ -22,8 +22,11 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.tuscany.spi.component.AtomicComponent;
+import org.apache.tuscany.spi.component.SCAObject;
 import static org.apache.tuscany.spi.idl.java.JavaIDLUtils.findMethod;
 import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.Scope;
 import org.apache.tuscany.spi.wire.InboundInvocationChain;
 import org.apache.tuscany.spi.wire.InboundWire;
 import org.apache.tuscany.spi.wire.Interceptor;
@@ -97,7 +100,6 @@
      * @return true if the wire is optimizable
      */
     public static boolean isOptimizable(OutboundWire wire) {
-
         for (OutboundInvocationChain chain : wire.getInvocationChains().values()) {
             if (chain.getHeadInterceptor() != null) {
                 Interceptor current = chain.getHeadInterceptor();
@@ -124,6 +126,17 @@
      * @return true if the wire is optimizable
      */
     public static boolean isOptimizable(InboundWire wire) {
+        SCAObject container = wire.getContainer();
+        if (!(container instanceof AtomicComponent)) {
+            // optimize only Atomic targets
+            // JFM TODO make more generalizable
+            return false;
+        }
+        if (container.getScope() == Scope.STATELESS && ((AtomicComponent) container).isDestroyable()) {
+            //Optimizations on stateless targets are not performed if they receive destroy events since a destruction
+            // notification must be given through a proxy
+            return false;
+        }
         for (InboundInvocationChain chain : wire.getInvocationChains().values()) {
             if (chain.getHeadInterceptor() != null) {
                 Interceptor current = chain.getHeadInterceptor();

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/WireOptimizationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/WireOptimizationTestCase.java?view=diff&rev=494980&r1=494979&r2=494980
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/WireOptimizationTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/WireOptimizationTestCase.java Wed Jan 10 13:00:26 2007
@@ -20,8 +20,11 @@
 
 import java.lang.reflect.Type;
 
+import org.apache.tuscany.spi.component.AtomicComponent;
+import org.apache.tuscany.spi.component.Component;
 import org.apache.tuscany.spi.model.Operation;
 import static org.apache.tuscany.spi.model.Operation.NO_CONVERSATION;
+import org.apache.tuscany.spi.model.Scope;
 import org.apache.tuscany.spi.wire.InboundInvocationChain;
 import org.apache.tuscany.spi.wire.InboundWire;
 import org.apache.tuscany.spi.wire.Interceptor;
@@ -30,6 +33,7 @@
 import org.apache.tuscany.spi.wire.OutboundWire;
 
 import junit.framework.TestCase;
+import org.easymock.EasyMock;
 
 /**
  * Verifies wire optimization analysis
@@ -37,14 +41,16 @@
  * @version $$Rev$$ $$Date$$
  */
 public class WireOptimizationTestCase extends TestCase {
-
     private Operation operation;
 
     public void foo() {
     }
 
     public void testSourceWireInterceptorOptimization() throws Exception {
+        AtomicComponent component = EasyMock.createNiceMock(AtomicComponent.class);
+        EasyMock.replay(component);
         OutboundWire wire = new OutboundWireImpl();
+        wire.setContainer(component);
         OutboundInvocationChain chain = new OutboundInvocationChainImpl(operation);
         chain.addInterceptor(new OptimizableInterceptor());
         wire.addInvocationChain(operation, chain);
@@ -52,7 +58,10 @@
     }
 
     public void testSourceWireNonInterceptorOptimization() throws Exception {
+        AtomicComponent component = EasyMock.createNiceMock(AtomicComponent.class);
+        EasyMock.replay(component);
         OutboundWire wire = new OutboundWireImpl();
+        wire.setContainer(component);
         OutboundInvocationChain chain = new OutboundInvocationChainImpl(operation);
         chain.addInterceptor(new NonOptimizableInterceptor());
         wire.addInvocationChain(operation, chain);
@@ -60,15 +69,72 @@
     }
 
     public void testTargetWireInterceptorOptimization() throws Exception {
+        AtomicComponent component = EasyMock.createNiceMock(AtomicComponent.class);
+        EasyMock.replay(component);
+        InboundWire wire = new InboundWireImpl();
+        wire.setContainer(component);
+        InboundInvocationChain chain = new InboundInvocationChainImpl(operation);
+        chain.addInterceptor(new OptimizableInterceptor());
+        wire.addInvocationChain(operation, chain);
+        assertTrue(WireUtils.isOptimizable(wire));
+
+    }
+
+    public void testTargetWireOptimizationDestroyableButNotStateless() throws Exception {
+        AtomicComponent component = EasyMock.createNiceMock(AtomicComponent.class);
+        EasyMock.expect(component.isDestroyable()).andReturn(true);
+        EasyMock.expect(component.getScope()).andReturn(Scope.COMPOSITE);
+        EasyMock.replay(component);
+        InboundWire wire = new InboundWireImpl();
+        wire.setContainer(component);
+        InboundInvocationChain chain = new InboundInvocationChainImpl(operation);
+        chain.addInterceptor(new OptimizableInterceptor());
+        wire.addInvocationChain(operation, chain);
+        assertTrue(WireUtils.isOptimizable(wire));
+    }
+
+    public void testTargetWireOptimizationDestroyableAndStateless() throws Exception {
+        AtomicComponent component = EasyMock.createNiceMock(AtomicComponent.class);
+        EasyMock.expect(component.isDestroyable()).andReturn(true);
+        EasyMock.expect(component.getScope()).andReturn(Scope.STATELESS);
+        EasyMock.replay(component);
+        InboundWire wire = new InboundWireImpl();
+        wire.setContainer(component);
+        InboundInvocationChain chain = new InboundInvocationChainImpl(operation);
+        chain.addInterceptor(new OptimizableInterceptor());
+        wire.addInvocationChain(operation, chain);
+        assertFalse(WireUtils.isOptimizable(wire));
+    }
+
+    public void testTargetWireOptimizationStatelessNotDestroyable() throws Exception {
+        AtomicComponent component = EasyMock.createNiceMock(AtomicComponent.class);
+        EasyMock.expect(component.isDestroyable()).andReturn(false);
+        EasyMock.expect(component.getScope()).andReturn(Scope.STATELESS);
+        EasyMock.replay(component);
         InboundWire wire = new InboundWireImpl();
+        wire.setContainer(component);
         InboundInvocationChain chain = new InboundInvocationChainImpl(operation);
         chain.addInterceptor(new OptimizableInterceptor());
         wire.addInvocationChain(operation, chain);
         assertTrue(WireUtils.isOptimizable(wire));
     }
 
+    public void testTargetWireNoOptimizationNonAtomicContainer() throws Exception {
+        Component component = EasyMock.createNiceMock(Component.class);
+        EasyMock.replay(component);
+        InboundWire wire = new InboundWireImpl();
+        wire.setContainer(component);
+        InboundInvocationChain chain = new InboundInvocationChainImpl(operation);
+        chain.addInterceptor(new OptimizableInterceptor());
+        wire.addInvocationChain(operation, chain);
+        assertFalse(WireUtils.isOptimizable(wire));
+    }
+
     public void testTargetWireNonInterceptorOptimization() throws Exception {
+        AtomicComponent component = EasyMock.createNiceMock(AtomicComponent.class);
+        EasyMock.replay(component);
         InboundWire wire = new InboundWireImpl();
+        wire.setContainer(component);
         InboundInvocationChain chain = new InboundInvocationChainImpl(operation);
         chain.addInterceptor(new NonOptimizableInterceptor());
         wire.addInvocationChain(operation, chain);



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org