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