You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jb...@apache.org on 2007/03/11 05:40:40 UTC

svn commit: r516851 - in /incubator/tuscany/java/sca/kernel: core/src/main/java/org/apache/tuscany/core/component/scope/ core/src/main/java/org/apache/tuscany/core/implementation/java/ core/src/test/java/org/apache/tuscany/core/component/scope/ core/sr...

Author: jboynes
Date: Sat Mar 10 20:40:39 2007
New Revision: 516851

URL: http://svn.apache.org/viewvc?view=rev&rev=516851
Log:
refactor scope containers to manage InstanceWrappers
this removes the component container from the loop when finding an instance to invoke and simplifies the target invokers
this will also allow us to remove methods from the AtomicComponent interface that were only there to act as a delegate between the invoker and the scope container

Removed:
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerNonBlockingInvocationTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/wire/DifferentInterfaceWireTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/wire/oneway/OneWayWireToJavaInvocationTestCase.java
Modified:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/AbstractScopeContainer.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainer.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/StatelessScopeContainer.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaAtomicComponent.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaTargetInvoker.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxAgeTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxIdleTimeTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerPersistenceTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerBasicInvocationTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerSequenceTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerStatelessDestroyTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/conversation/ConversationIdleExpireTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/conversation/ConversationMaxAgeExpireTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/conversation/ConversationStartStopEndTestCase.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/ScopeContainer.java

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/AbstractScopeContainer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/AbstractScopeContainer.java?view=diff&rev=516851&r1=516850&r2=516851
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/AbstractScopeContainer.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/AbstractScopeContainer.java Sat Mar 10 20:40:39 2007
@@ -33,6 +33,7 @@
 import org.apache.tuscany.spi.component.TargetResolutionException;
 import org.apache.tuscany.spi.component.WorkContext;
 import org.apache.tuscany.spi.component.InstanceWrapper;
+import org.apache.tuscany.spi.component.TargetDestructionException;
 import org.apache.tuscany.spi.event.Event;
 import org.apache.tuscany.spi.event.EventFilter;
 import org.apache.tuscany.spi.event.RuntimeEventListener;
@@ -94,6 +95,21 @@
                 }
             }
         }
+    }
+
+    public <T> InstanceWrapper<T> getWrapper(AtomicComponent component) throws TargetResolutionException {
+        return getInstanceWrapper(component, true);
+    }
+
+    public <T> InstanceWrapper<T> getAssociatedWrapper(AtomicComponent component) throws TargetResolutionException {
+        InstanceWrapper wrapper = getInstanceWrapper(component, false);
+        if (wrapper == null) {
+            throw new TargetNotFoundException(component.getUri().toString());
+        }
+        return wrapper;
+    }
+
+    public <T> void returnWrapper(AtomicComponent component, InstanceWrapper<T> wrapper) throws TargetDestructionException {
     }
 
     public Object getInstance(AtomicComponent component) throws TargetResolutionException {

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainer.java?view=diff&rev=516851&r1=516850&r2=516851
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainer.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainer.java Sat Mar 10 20:40:39 2007
@@ -81,6 +81,7 @@
         component.addListener(this);
     }
 
+/*
     @Override
     public Object getInstance(AtomicComponent component) throws TargetResolutionException {
         String conversationId = getConversationId();
@@ -134,6 +135,7 @@
             workContext.setCurrentAtomicComponent(null);
         }
     }
+*/
 
     public void persistNew(AtomicComponent component, String id, Object instance, long expiration)
         throws PersistenceException {
@@ -168,8 +170,33 @@
         }
     }
 
-    protected InstanceWrapper getInstanceWrapper(AtomicComponent component, boolean create) {
-        throw new UnsupportedOperationException();
+    protected InstanceWrapper getInstanceWrapper(AtomicComponent component, boolean create)
+        throws TargetResolutionException {
+        String conversationId = getConversationId();
+        try {
+            workContext.setCurrentAtomicComponent(component);
+            InstanceWrapper wrapper = (InstanceWrapper) nonDurableStore.readRecord(component, conversationId);
+            if (wrapper != null) {
+                if (component.getMaxIdleTime() > 0) {
+                    // update expiration
+                    long expire = System.currentTimeMillis() + component.getMaxIdleTime();
+                    nonDurableStore.updateRecord(component, conversationId, wrapper, expire);
+                }
+            } else if (create) {
+                // FIXME should the store really be persisting the wrappers
+                wrapper = component.createInstanceWrapper();
+                wrapper.start();
+                long expire = calculateExpiration(component);
+                nonDurableStore.insertRecord(component, conversationId, wrapper, expire);
+            }
+            return wrapper;
+        } catch (StoreReadException e) {
+            throw new TargetResolutionException("Error retrieving target instance", e);
+        } catch (StoreWriteException e) {
+            throw new TargetResolutionException("Error persisting target instance", e);
+        } finally {
+            workContext.setCurrentAtomicComponent(null);
+        }
     }
 
     /**

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/StatelessScopeContainer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/StatelessScopeContainer.java?view=diff&rev=516851&r1=516850&r2=516851
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/StatelessScopeContainer.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/StatelessScopeContainer.java Sat Mar 10 20:40:39 2007
@@ -23,6 +23,7 @@
 import org.apache.tuscany.spi.component.TargetResolutionException;
 import org.apache.tuscany.spi.component.WorkContext;
 import org.apache.tuscany.spi.component.InstanceWrapper;
+import org.apache.tuscany.spi.component.TargetDestructionException;
 import org.apache.tuscany.spi.event.Event;
 import org.apache.tuscany.spi.model.Scope;
 
@@ -73,4 +74,9 @@
         return ctx;
     }
 
+    public <T> void returnWrapper(AtomicComponent component, InstanceWrapper<T> wrapper)
+        throws TargetDestructionException {
+        super.returnWrapper(component, wrapper);
+        wrapper.stop();
+    }
 }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaAtomicComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaAtomicComponent.java?view=diff&rev=516851&r1=516850&r2=516851
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaAtomicComponent.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaAtomicComponent.java Sat Mar 10 20:40:39 2007
@@ -54,7 +54,7 @@
         }
         try {
             Method method = JavaIDLUtils.findMethod(implClass, operation);
-            return new JavaTargetInvoker(method, this, null, workContext);
+            return new JavaTargetInvoker(method, this, scopeContainer, workContext);
         } catch (NoSuchMethodException e) {
             throw new TargetMethodNotFoundException(operation);
         }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaTargetInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaTargetInvoker.java?view=diff&rev=516851&r1=516850&r2=516851
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaTargetInvoker.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaTargetInvoker.java Sat Mar 10 20:40:39 2007
@@ -20,20 +20,17 @@
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.util.Set;
 
 import org.apache.tuscany.spi.component.AtomicComponent;
 import org.apache.tuscany.spi.component.ComponentException;
+import org.apache.tuscany.spi.component.InstanceWrapper;
 import org.apache.tuscany.spi.component.InvalidConversationSequenceException;
+import org.apache.tuscany.spi.component.ScopeContainer;
 import org.apache.tuscany.spi.component.TargetException;
 import org.apache.tuscany.spi.component.WorkContext;
-import org.apache.tuscany.spi.component.ScopeContainer;
 import org.apache.tuscany.spi.extension.TargetInvokerExtension;
 import org.apache.tuscany.spi.model.Scope;
 
-import static org.apache.tuscany.core.util.JavaIntrospectionHelper.findClosestMatchingMethod;
-import static org.apache.tuscany.core.util.JavaIntrospectionHelper.getAllUniquePublicProtectedMethods;
-
 /**
  * Responsible for synchronously dispatching an invocation to a Java component implementation instance
  *
@@ -43,7 +40,7 @@
     protected Method operation;
     private final AtomicComponent component;
     private final ScopeContainer scopeContainer;
-    protected Object target;
+    protected InstanceWrapper<?> target;
     protected boolean stateless;
 
     public JavaTargetInvoker(Method operation,
@@ -55,25 +52,23 @@
         this.operation = operation;
         this.component = component;
         this.scopeContainer = scopeContainer;
-        stateless = Scope.STATELESS == component.getScope();
+        stateless = Scope.STATELESS == scopeContainer.getScope();
     }
 
     public Object invokeTarget(final Object payload, final short sequence) throws InvocationTargetException {
         try {
-            Object instance = getInstance(sequence);
+            InstanceWrapper<?> wrapper = getInstance(sequence);
+            Object instance = wrapper.getInstance();
             Object ret;
             if (payload != null && !payload.getClass().isArray()) {
                 ret = operation.invoke(instance, payload);
             } else {
                 ret = operation.invoke(instance, (Object[]) payload);
             }
-            if (stateless) {
-                // notify a stateless instance of a destruction event after the invoke
-                component.destroy(instance);
-            } else if (sequence == END) {
-                component.destroy(instance);
+            scopeContainer.returnWrapper(component, wrapper);
+            if (sequence == END) {
                 // if end conversation, remove resource
-                component.removeInstance();
+                scopeContainer.remove(component);
             }
             return ret;
         } catch (IllegalAccessException e) {
@@ -97,24 +92,24 @@
     /**
      * Resolves the target service instance or returns a cached one
      */
-    protected Object getInstance(short sequence) throws TargetException {
+    protected InstanceWrapper<?> getInstance(short sequence) throws TargetException {
         switch (sequence) {
         case NONE:
             if (cacheable) {
                 if (target == null) {
-                    target = component.getTargetInstance();
+                    target = scopeContainer.getWrapper(component);
                 }
                 return target;
             } else {
-                return component.getTargetInstance();
+                return scopeContainer.getWrapper(component);
             }
         case START:
             assert !cacheable;
-            return component.getTargetInstance();
+            return scopeContainer.getWrapper(component);
         case CONTINUE:
         case END:
             assert !cacheable;
-            return component.getAssociatedTargetInstance();
+            return scopeContainer.getAssociatedWrapper(component);
         default:
             throw new InvalidConversationSequenceException("Unknown sequence type", String.valueOf(sequence));
         }

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxAgeTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxAgeTestCase.java?view=diff&rev=516851&r1=516850&r2=516851
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxAgeTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxAgeTestCase.java Sat Mar 10 20:40:39 2007
@@ -22,6 +22,7 @@
 import org.apache.tuscany.spi.component.SCAObject;
 import org.apache.tuscany.spi.component.ScopeContainer;
 import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.component.InstanceWrapper;
 import org.apache.tuscany.spi.event.RuntimeEventListener;
 import org.apache.tuscany.spi.model.Scope;
 import org.apache.tuscany.spi.services.store.Store;
@@ -39,23 +40,26 @@
     private WorkContext context;
     private Store store;
     private AtomicComponent component;
+    private InstanceWrapper wrapper;
 
     public void testMaxAgeUpdate() throws Exception {
         context.setIdentifier(Scope.CONVERSATION, "12345");
-        container.getInstance(component);
+        assertSame(wrapper, container.getWrapper(component));
         EasyMock.verify(store);
     }
 
     protected void setUp() throws Exception {
         super.setUp();
-        ConversationalScopeContainerMaxAgeTestCase.Foo foo = new ConversationalScopeContainerMaxAgeTestCase.Foo();
         context = new WorkContextImpl();
         component = EasyMock.createMock(AtomicComponent.class);
         EasyMock.expect(component.getMaxIdleTime()).andReturn(-1L).atLeastOnce();
         EasyMock.expect(component.getMaxAge()).andReturn(600000L).atLeastOnce();
         EasyMock.replay(component);
+
+        wrapper = EasyMock.createMock(InstanceWrapper.class);
+
         store = EasyMock.createMock(Store.class);
-        EasyMock.expect(store.readRecord(EasyMock.isA(SCAObject.class), EasyMock.isA(String.class))).andReturn(foo);
+        EasyMock.expect(store.readRecord(EasyMock.isA(SCAObject.class), EasyMock.isA(String.class))).andReturn(wrapper);
         store.addListener(EasyMock.isA(RuntimeEventListener.class));
         EasyMock.replay(store);
         container = new ConversationalScopeContainer(store, context, null);
@@ -67,9 +71,4 @@
         context.clearIdentifier(Scope.CONVERSATION);
         container.stop();
     }
-
-    private class Foo {
-
-    }
-
 }

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxIdleTimeTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxIdleTimeTestCase.java?view=diff&rev=516851&r1=516850&r2=516851
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxIdleTimeTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxIdleTimeTestCase.java Sat Mar 10 20:40:39 2007
@@ -22,6 +22,7 @@
 import org.apache.tuscany.spi.component.SCAObject;
 import org.apache.tuscany.spi.component.ScopeContainer;
 import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.component.InstanceWrapper;
 import org.apache.tuscany.spi.event.RuntimeEventListener;
 import org.apache.tuscany.spi.model.Scope;
 import org.apache.tuscany.spi.services.store.Store;
@@ -39,26 +40,27 @@
     private WorkContext context;
     private Store store;
     private AtomicComponent component;
+    private InstanceWrapper wrapper;
 
     public void testMaxIdleTimeUpdate() throws Exception {
         context.setIdentifier(Scope.CONVERSATION, "12345");
-        container.getInstance(component);
+        assertSame(wrapper, container.getWrapper(component));
         EasyMock.verify(store);
     }
 
     protected void setUp() throws Exception {
         super.setUp();
-        Foo foo = new Foo();
+        wrapper = EasyMock.createMock(InstanceWrapper.class);
         context = new WorkContextImpl();
         component = EasyMock.createMock(AtomicComponent.class);
         EasyMock.expect(component.getMaxIdleTime()).andReturn(600000L).atLeastOnce();
         EasyMock.replay(component);
         store = EasyMock.createMock(Store.class);
-        EasyMock.expect(store.readRecord(EasyMock.isA(SCAObject.class), EasyMock.isA(String.class))).andReturn(foo);
+        EasyMock.expect(store.readRecord(EasyMock.isA(SCAObject.class), EasyMock.isA(String.class))).andReturn(wrapper);
         store.addListener(EasyMock.isA(RuntimeEventListener.class));
         store.updateRecord(EasyMock.isA(SCAObject.class),
             EasyMock.isA(String.class),
-            EasyMock.eq(foo),
+            EasyMock.eq(wrapper),
             EasyMock.anyLong());
         EasyMock.replay(store);
         container = new ConversationalScopeContainer(store, context, null);
@@ -69,10 +71,6 @@
         super.tearDown();
         context.clearIdentifier(Scope.CONVERSATION);
         container.stop();
-    }
-
-    private class Foo {
-
     }
 
 }

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerPersistenceTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerPersistenceTestCase.java?view=diff&rev=516851&r1=516850&r2=516851
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerPersistenceTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerPersistenceTestCase.java Sat Mar 10 20:40:39 2007
@@ -42,14 +42,9 @@
     private ScopeContainer container;
     private WorkContext context;
 
-    /**
-     * Verifies the scope container properly creates an instance
-     */
     public void testNotYetPersistedInMemory() throws Exception {
-        Foo comp = new Foo();
         InstanceWrapper wrapper = EasyMock.createMock(InstanceWrapper.class);
         wrapper.start();
-        EasyMock.expect(wrapper.getInstance()).andReturn(comp);
         EasyMock.replay(wrapper);
 
         String id = UUID.randomUUID().toString();
@@ -61,7 +56,7 @@
         EasyMock.replay(component);
 
         container.register(component);
-        assertSame(comp, container.getInstance(component));
+        assertSame(wrapper, container.getWrapper(component));
         EasyMock.verify(component);
         EasyMock.verify(wrapper);
     }
@@ -75,13 +70,13 @@
         EasyMock.expect(component.getMaxIdleTime()).andReturn(-1L).atLeastOnce();
         EasyMock.replay(component);
         container.register(component);
-        Foo foo = new Foo();
-        Foo foo2 = new Foo();
-        container.persistNew(component, id, foo, System.currentTimeMillis() + 100000);
-        assertEquals(foo, container.getInstance(component));
-        container.persistNew(component, id2, foo2, System.currentTimeMillis() + 100000);
+        InstanceWrapper fooWrapper = EasyMock.createMock(InstanceWrapper.class);
+        InstanceWrapper fooWrapper2 = EasyMock.createMock(InstanceWrapper.class);
+        container.persistNew(component, id, fooWrapper, System.currentTimeMillis() + 100000);
+        assertEquals(fooWrapper, container.getWrapper(component));
+        container.persistNew(component, id2, fooWrapper2, System.currentTimeMillis() + 100000);
         context.setIdentifier(Scope.CONVERSATION, id2);
-        assertEquals(foo2, container.getInstance(component));
+        assertEquals(fooWrapper2, container.getWrapper(component));
         EasyMock.verify(component);
     }
 
@@ -93,11 +88,11 @@
         EasyMock.expect(component.getMaxIdleTime()).andReturn(-1L).atLeastOnce();
         EasyMock.replay(component);
         container.register(component);
-        Foo foo = new Foo();
-        container.persistNew(component, id, foo, System.currentTimeMillis() + 100000);
-        assertEquals(foo, container.getInstance(component));
-        container.persist(component, id, foo, System.currentTimeMillis() + 100000);
-        assertEquals(foo, container.getInstance(component));
+        InstanceWrapper fooWrapper = EasyMock.createMock(InstanceWrapper.class);
+        container.persistNew(component, id, fooWrapper, System.currentTimeMillis() + 100000);
+        assertEquals(fooWrapper, container.getWrapper(component));
+        container.persist(component, id, fooWrapper, System.currentTimeMillis() + 100000);
+        assertEquals(fooWrapper, container.getWrapper(component));
         EasyMock.verify(component);
     }
 
@@ -110,12 +105,12 @@
         EasyMock.expect(component.getUri()).andReturn(URI.create("foo")).atLeastOnce();
         EasyMock.replay(component);
         container.register(component);
-        Foo foo = new Foo();
-        container.persistNew(component, id, foo, System.currentTimeMillis() + 100000);
-        assertEquals(foo, container.getInstance(component));
+        InstanceWrapper fooWrapper = EasyMock.createMock(InstanceWrapper.class);
+        container.persistNew(component, id, fooWrapper, System.currentTimeMillis() + 100000);
+        assertEquals(fooWrapper, container.getWrapper(component));
         container.remove(component);
         try {
-            container.getAssociatedInstance(component);
+            container.getAssociatedWrapper(component);
             fail();
         } catch (TargetNotFoundException e) {
             //expected
@@ -124,10 +119,8 @@
     }
 
     public void testRecreateAfterRemoveInMemory() throws Exception {
-        Foo comp = new Foo();
         InstanceWrapper wrapper = EasyMock.createMock(InstanceWrapper.class);
         wrapper.start();
-        EasyMock.expect(wrapper.getInstance()).andReturn(comp);
         EasyMock.replay(wrapper);
 
         String id = UUID.randomUUID().toString();
@@ -140,13 +133,11 @@
         EasyMock.replay(component);
 
         container.register(component);
-        Foo foo = new Foo();
-        container.persistNew(component, id, foo, System.currentTimeMillis() + 100000);
-        assertEquals(foo, container.getInstance(component));
+        InstanceWrapper fooWrapper = EasyMock.createMock(InstanceWrapper.class);
+        container.persistNew(component, id, fooWrapper, System.currentTimeMillis() + 100000);
+        assertEquals(fooWrapper, container.getWrapper(component));
         container.remove(component);
-        Foo foo2 = (Foo) container.getInstance(component);
-        assertNotNull(foo2);
-        assertNotSame(foo, foo2);
+        assertSame(wrapper, container.getWrapper(component));
         EasyMock.verify(component);
     }
 
@@ -160,13 +151,14 @@
         component.addListener(EasyMock.eq(container));
         EasyMock.replay(component);
         container.register(component);
-        Foo foo = new Foo();
-        container.persistNew(component, id, foo, System.currentTimeMillis() + 100000);
-        assertEquals(foo, container.getAssociatedInstance(component));
-        assertEquals(foo, container.getAssociatedInstance(component));
+
+        InstanceWrapper fooWrapper = EasyMock.createMock(InstanceWrapper.class);
+        container.persistNew(component, id, fooWrapper, System.currentTimeMillis() + 100000);
+        assertEquals(fooWrapper, container.getAssociatedWrapper(component));
+        assertEquals(fooWrapper, container.getAssociatedWrapper(component));
         context.setIdentifier(Scope.CONVERSATION, id2);
         try {
-            container.getAssociatedInstance(component);
+            container.getAssociatedWrapper(component);
             fail();
         } catch (TargetNotFoundException e) {
             //expected
@@ -188,9 +180,5 @@
         super.tearDown();
         context.clearIdentifier(Scope.CONVERSATION);
         container.stop();
-    }
-
-    private class Foo {
-
     }
 }

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerBasicInvocationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerBasicInvocationTestCase.java?view=diff&rev=516851&r1=516850&r2=516851
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerBasicInvocationTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerBasicInvocationTestCase.java Sat Mar 10 20:40:39 2007
@@ -22,6 +22,8 @@
 import java.lang.reflect.Method;
 
 import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.component.ScopeContainer;
+import org.apache.tuscany.spi.component.InstanceWrapper;
 import org.apache.tuscany.spi.extension.ExecutionMonitor;
 import org.apache.tuscany.spi.model.Scope;
 import static org.apache.tuscany.spi.wire.TargetInvoker.NONE;
@@ -39,7 +41,10 @@
     private Method runtimeMethod;
     private Wire wire;
     private WorkContext context;
-    private ExecutionMonitor monitor;
+    private ScopeContainer scopeContainer;
+    private InstanceWrapper wrapper;
+    private TestBean bean;
+    private JavaAtomicComponent component;
 
     public JavaTargetInvokerBasicInvocationTestCase(String arg0) {
         super(arg0);
@@ -52,33 +57,40 @@
         primitiveMethod = TestBean.class.getDeclaredMethod("primitiveEcho", Integer.TYPE);
         checkedMethod = TestBean.class.getDeclaredMethod("checkedException", (Class[]) null);
         runtimeMethod = TestBean.class.getDeclaredMethod("runtimeException", (Class[]) null);
-        wire = EasyMock.createNiceMock(Wire.class);
-        context = EasyMock.createNiceMock(WorkContext.class);
-        monitor = EasyMock.createNiceMock(ExecutionMonitor.class);
         assertNotNull(echoMethod);
         assertNotNull(checkedMethod);
         assertNotNull(runtimeMethod);
+
+        wire = EasyMock.createNiceMock(Wire.class);
+        context = EasyMock.createNiceMock(WorkContext.class);
+        component = EasyMock.createMock(JavaAtomicComponent.class);
+        scopeContainer = EasyMock.createNiceMock(ScopeContainer.class);
+        wrapper = EasyMock.createNiceMock(InstanceWrapper.class);
+        bean = new TestBean();
+        EasyMock.replay(component);
+        EasyMock.expect(scopeContainer.getScope()).andReturn(Scope.COMPOSITE);
+        EasyMock.expect(scopeContainer.getWrapper(component)).andReturn(wrapper);
+        EasyMock.replay(scopeContainer);
+        EasyMock.expect(wrapper.getInstance()).andReturn(bean);
+        EasyMock.replay(wrapper);
+    }
+
+
+    protected void tearDown() throws Exception {
+        EasyMock.verify(component);
+        EasyMock.verify(scopeContainer);
+        EasyMock.verify(wrapper);
+        super.tearDown();
     }
 
     public void testObjectInvoke() throws Throwable {
-        TestBean bean = new TestBean();
-        JavaAtomicComponent component = EasyMock.createMock(JavaAtomicComponent.class);
-        EasyMock.expect(component.getTargetInstance()).andReturn(bean);
-        EasyMock.expect(component.getScope()).andReturn(Scope.COMPOSITE);
-        EasyMock.replay(component);
-        JavaTargetInvoker invoker = new JavaTargetInvoker(echoMethod, component, null, context);
+        JavaTargetInvoker invoker = new JavaTargetInvoker(echoMethod, component, scopeContainer, context);
         Object ret = invoker.invokeTarget("foo", NONE);
         assertEquals("foo", ret);
     }
 
     public void testArrayInvoke() throws Throwable {
-        TestBean bean = new TestBean();
-        JavaAtomicComponent component = EasyMock.createMock(JavaAtomicComponent.class);
-        EasyMock.expect(component.getTargetInstance()).andReturn(bean);
-        EasyMock.expect(component.getScope()).andReturn(Scope.COMPOSITE);
-        EasyMock.replay(component);
-        JavaTargetInvoker invoker = new JavaTargetInvoker(arrayMethod, component, null, context);
-
+        JavaTargetInvoker invoker = new JavaTargetInvoker(arrayMethod, component, scopeContainer, context);
         String[] args = new String[]{"foo", "bar"};
         Object ret = invoker.invokeTarget(new Object[]{args}, NONE);
         String[] retA = (String[]) ret;
@@ -89,63 +101,37 @@
     }
 
     public void testNullInvoke() throws Throwable {
-        TestBean bean = new TestBean();
-        JavaAtomicComponent component = EasyMock.createMock(JavaAtomicComponent.class);
-        EasyMock.expect(component.getTargetInstance()).andReturn(bean);
-        EasyMock.expect(component.getScope()).andReturn(Scope.COMPOSITE);
-        EasyMock.replay(component);
-        JavaTargetInvoker invoker = new JavaTargetInvoker(nullParamMethod, component, null, context);
+        JavaTargetInvoker invoker = new JavaTargetInvoker(nullParamMethod, component, scopeContainer, context);
         Object ret = invoker.invokeTarget(null, NONE);
         String retS = (String) ret;
         assertEquals("foo", retS);
     }
 
     public void testPrimitiveInvoke() throws Throwable {
-        TestBean bean = new TestBean();
-        JavaAtomicComponent component = EasyMock.createMock(JavaAtomicComponent.class);
-        EasyMock.expect(component.getTargetInstance()).andReturn(bean);
-        EasyMock.expect(component.getScope()).andReturn(Scope.COMPOSITE);
-        EasyMock.replay(component);
-        JavaTargetInvoker invoker = new JavaTargetInvoker(primitiveMethod, component, null, context);
+        JavaTargetInvoker invoker = new JavaTargetInvoker(primitiveMethod, component, scopeContainer, context);
         Object ret = invoker.invokeTarget(new Integer[]{1}, NONE);
         Integer retI = (Integer) ret;
         assertEquals(1, retI.intValue());
     }
 
     public void testInvokeCheckedException() throws Throwable {
-        TestBean bean = new TestBean();
-        JavaAtomicComponent component = EasyMock.createMock(JavaAtomicComponent.class);
-        EasyMock.expect(component.getTargetInstance()).andReturn(bean);
-        EasyMock.expect(component.getScope()).andReturn(Scope.COMPOSITE);
-        EasyMock.replay(component);
-        JavaTargetInvoker invoker = new JavaTargetInvoker(checkedMethod, component, null, context);
+        JavaTargetInvoker invoker = new JavaTargetInvoker(checkedMethod, component, scopeContainer, context);
         try {
             invoker.invokeTarget(null, NONE);
+            fail(TestException.class.getName() + " should have been thrown");
         } catch (InvocationTargetException e) {
-            if (e.getCause() != null && TestException.class.equals(e.getCause().getClass())) {
-                return;
-            }
-        } catch (Throwable e) {
-            //ok
+            assertTrue(e.getCause() instanceof TestException);
         }
-        fail(TestException.class.getName() + " should have been thrown");
     }
 
     public void testInvokeRuntimeException() throws Throwable {
-        TestBean bean = new TestBean();
-        JavaAtomicComponent component = EasyMock.createMock(JavaAtomicComponent.class);
-        EasyMock.expect(component.getTargetInstance()).andReturn(bean);
-        EasyMock.expect(component.getScope()).andReturn(Scope.COMPOSITE);
-        EasyMock.replay(component);
-        JavaTargetInvoker invoker = new JavaTargetInvoker(runtimeMethod, component, null, context);
+        JavaTargetInvoker invoker = new JavaTargetInvoker(runtimeMethod, component, scopeContainer, context);
         try {
             invoker.invokeTarget(null, NONE);
+            fail(TestException.class.getName() + " should have been thrown");
         } catch (InvocationTargetException e) {
-            if (e.getCause() != null && e.getCause() instanceof TestRuntimeException) {
-                return;
-            }
+            assertTrue(e.getCause() instanceof TestRuntimeException);
         }
-        fail(TestException.class.getName() + " should have been thrown");
     }
 
     private class TestBean {

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerSequenceTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerSequenceTestCase.java?view=diff&rev=516851&r1=516850&r2=516851
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerSequenceTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerSequenceTestCase.java Sat Mar 10 20:40:39 2007
@@ -18,10 +18,14 @@
  */
 package org.apache.tuscany.core.implementation.java;
 
+import java.lang.reflect.Method;
+
 import org.apache.tuscany.spi.model.Scope;
 import org.apache.tuscany.spi.wire.Message;
 import org.apache.tuscany.spi.wire.MessageImpl;
 import org.apache.tuscany.spi.wire.TargetInvoker;
+import org.apache.tuscany.spi.component.ScopeContainer;
+import org.apache.tuscany.spi.component.InstanceWrapper;
 
 import junit.framework.TestCase;
 import org.easymock.classextension.EasyMock;
@@ -30,62 +34,80 @@
  * @version $Rev$ $Date$
  */
 public class JavaTargetInvokerSequenceTestCase extends TestCase {
+    private Method method;
+    private Foo foo;
+    private JavaAtomicComponent component;
+    private ScopeContainer scopeContainer;
+    private InstanceWrapper wrapper;
+
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        method = Foo.class.getMethod("invoke");
+        foo = EasyMock.createMock(Foo.class);
+        foo.invoke();
+        EasyMock.replay(foo);
+
+        component = EasyMock.createMock(JavaAtomicComponent.class);
+        scopeContainer = EasyMock.createMock(ScopeContainer.class);
+        EasyMock.expect(scopeContainer.getScope()).andReturn(Scope.CONVERSATION);
+        wrapper = EasyMock.createMock(InstanceWrapper.class);
+        EasyMock.expect(wrapper.getInstance()).andReturn(foo);
+        EasyMock.replay(wrapper);
+    }
 
     /**
      * Verifies an invocation marked as non-conversational has an existing or new instance returned
      */
     public void testNoSequence() throws Exception {
-        Foo foo = EasyMock.createMock(Foo.class);
-        foo.invoke();
-        EasyMock.replay(foo);
-        JavaAtomicComponent component = EasyMock.createMock(JavaAtomicComponent.class);
-        EasyMock.expect(component.getTargetInstance()).andReturn(foo);
-        EasyMock.expect(component.getScope()).andReturn(Scope.CONVERSATION);
+        EasyMock.expect(scopeContainer.getWrapper(component)).andReturn(wrapper);
+        scopeContainer.returnWrapper(component, wrapper);
         EasyMock.replay(component);
-        JavaTargetInvoker invoker = new JavaTargetInvoker(Foo.class.getMethod("invoke"), component, null, null);
+        EasyMock.replay(scopeContainer);
+        JavaTargetInvoker invoker = new JavaTargetInvoker(method, component, scopeContainer, null);
         Message msg = new MessageImpl();
         msg.setConversationSequence(TargetInvoker.NONE);
         invoker.invoke(msg);
         EasyMock.verify(foo);
         EasyMock.verify(component);
+        EasyMock.verify(scopeContainer);
+        EasyMock.verify(wrapper);
     }
 
     /**
      * Verifies that an invocation marked as starting a conversation has a new instance returned
      */
     public void testStartSequence() throws Exception {
-        Foo foo = EasyMock.createMock(Foo.class);
-        foo.invoke();
-        EasyMock.replay(foo);
-        JavaAtomicComponent component = EasyMock.createMock(JavaAtomicComponent.class);
-        EasyMock.expect(component.getTargetInstance()).andReturn(foo);
-        EasyMock.expect(component.getScope()).andReturn(Scope.CONVERSATION);
         EasyMock.replay(component);
-        JavaTargetInvoker invoker = new JavaTargetInvoker(Foo.class.getMethod("invoke"), component, null, null);
+        EasyMock.expect(scopeContainer.getWrapper(component)).andReturn(wrapper);
+        scopeContainer.returnWrapper(component, wrapper);
+        EasyMock.replay(scopeContainer);
+        JavaTargetInvoker invoker = new JavaTargetInvoker(method, component, scopeContainer, null);
         Message msg = new MessageImpl();
         msg.setConversationSequence(TargetInvoker.START);
         invoker.invoke(msg);
         EasyMock.verify(foo);
         EasyMock.verify(component);
+        EasyMock.verify(scopeContainer);
+        EasyMock.verify(wrapper);
     }
 
     /**
      * Verifies that an invocation marked as continuing a conversation has an associated instance returned
      */
     public void testContinueSequence() throws Exception {
-        Foo foo = EasyMock.createMock(Foo.class);
-        foo.invoke();
-        EasyMock.replay(foo);
-        JavaAtomicComponent component = EasyMock.createMock(JavaAtomicComponent.class);
-        EasyMock.expect(component.getAssociatedTargetInstance()).andReturn(foo);
-        EasyMock.expect(component.getScope()).andReturn(Scope.CONVERSATION);
         EasyMock.replay(component);
-        JavaTargetInvoker invoker = new JavaTargetInvoker(Foo.class.getMethod("invoke"), component, null, null);
+        EasyMock.expect(scopeContainer.getAssociatedWrapper(component)).andReturn(wrapper);
+        scopeContainer.returnWrapper(component, wrapper);
+        EasyMock.replay(scopeContainer);
+        JavaTargetInvoker invoker = new JavaTargetInvoker(method, component, scopeContainer, null);
         Message msg = new MessageImpl();
         msg.setConversationSequence(TargetInvoker.CONTINUE);
         invoker.invoke(msg);
         EasyMock.verify(foo);
         EasyMock.verify(component);
+        EasyMock.verify(scopeContainer);
+        EasyMock.verify(wrapper);
     }
 
     /**
@@ -93,21 +115,19 @@
      * following the dispatch to the instance
      */
     public void testEndSequence() throws Exception {
-        Foo foo = EasyMock.createMock(Foo.class);
-        foo.invoke();
-        EasyMock.replay(foo);
-        JavaAtomicComponent component = EasyMock.createMock(JavaAtomicComponent.class);
-        EasyMock.expect(component.getAssociatedTargetInstance()).andReturn(foo);
-        EasyMock.expect(component.getScope()).andReturn(Scope.CONVERSATION);
-        component.removeInstance();
-        component.destroy(EasyMock.eq(foo));
         EasyMock.replay(component);
-        JavaTargetInvoker invoker = new JavaTargetInvoker(Foo.class.getMethod("invoke"), component, null, null);
+        EasyMock.expect(scopeContainer.getAssociatedWrapper(component)).andReturn(wrapper);
+        scopeContainer.returnWrapper(component, wrapper);
+        scopeContainer.remove(component);
+        EasyMock.replay(scopeContainer);
+        JavaTargetInvoker invoker = new JavaTargetInvoker(method, component, scopeContainer, null);
         Message msg = new MessageImpl();
         msg.setConversationSequence(TargetInvoker.END);
         invoker.invoke(msg);
         EasyMock.verify(foo);
         EasyMock.verify(component);
+        EasyMock.verify(scopeContainer);
+        EasyMock.verify(wrapper);
     }
 
 

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerStatelessDestroyTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerStatelessDestroyTestCase.java?view=diff&rev=516851&r1=516850&r2=516851
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerStatelessDestroyTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerStatelessDestroyTestCase.java Sat Mar 10 20:40:39 2007
@@ -21,27 +21,40 @@
 import java.lang.reflect.Method;
 
 import org.apache.tuscany.spi.model.Scope;
+import org.apache.tuscany.spi.component.ScopeContainer;
+import org.apache.tuscany.spi.component.InstanceWrapper;
 
 import junit.framework.TestCase;
 import org.easymock.classextension.EasyMock;
 
 public class JavaTargetInvokerStatelessDestroyTestCase extends TestCase {
-
-    public JavaTargetInvokerStatelessDestroyTestCase(String arg0) {
-        super(arg0);
-    }
+    private JavaAtomicComponent component;
+    private ScopeContainer scopeContainer;
+    private InstanceWrapper wrapper;
+    private Method echoMethod;
 
     public void testDestroy() throws Exception {
-        Method echoMethod = Echo.class.getDeclaredMethod("echo", String.class);
-        JavaAtomicComponent component = EasyMock.createMock(JavaAtomicComponent.class);
-        EasyMock.expect(component.getTargetInstance()).andReturn(new JavaTargetInvokerStatelessDestroyTestCase.Echo());
-        EasyMock.expect(component.getScope()).andReturn(Scope.STATELESS);
-        component.destroy(EasyMock.isA(Echo.class));
+        EasyMock.expect(scopeContainer.getWrapper(component)).andReturn(wrapper);
+        EasyMock.expect(wrapper.getInstance()).andReturn(new Echo());
+        scopeContainer.returnWrapper(component, wrapper);
         EasyMock.replay(component);
-        JavaTargetInvoker invoker = new JavaTargetInvoker(echoMethod, component, null, null);
+        EasyMock.replay(scopeContainer);
+        EasyMock.replay(wrapper);
+        JavaTargetInvoker invoker = new JavaTargetInvoker(echoMethod, component, scopeContainer, null);
         invoker.setCacheable(false);
         assertEquals("foo", invoker.invokeTarget("foo", JavaTargetInvoker.NONE));
         EasyMock.verify(component);
+        EasyMock.verify(scopeContainer);
+        EasyMock.verify(wrapper);
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        echoMethod = Echo.class.getDeclaredMethod("echo", String.class);
+        component = EasyMock.createMock(JavaAtomicComponent.class);
+        scopeContainer = EasyMock.createNiceMock(ScopeContainer.class);
+        EasyMock.expect(scopeContainer.getScope()).andReturn(Scope.STATELESS);
+        wrapper = EasyMock.createNiceMock(InstanceWrapper.class);
     }
 
     public static class Echo {

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/conversation/ConversationIdleExpireTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/conversation/ConversationIdleExpireTestCase.java?view=diff&rev=516851&r1=516850&r2=516851
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/conversation/ConversationIdleExpireTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/conversation/ConversationIdleExpireTestCase.java Sat Mar 10 20:40:39 2007
@@ -28,6 +28,7 @@
 import org.apache.tuscany.spi.ObjectCreationException;
 import org.apache.tuscany.spi.component.AtomicComponent;
 import org.apache.tuscany.spi.component.TargetNotFoundException;
+import org.apache.tuscany.spi.component.InstanceWrapper;
 import org.apache.tuscany.spi.wire.InvocationChain;
 import org.apache.tuscany.spi.wire.Wire;
 
@@ -56,7 +57,7 @@
         // start the conversation
         handler.invoke(operation1, null);
         // verify the instance was persisted
-        assertEquals(targetInstance, store.readRecord(target, "12345A"));
+        assertEquals(targetInstance, ((InstanceWrapper)store.readRecord(target, "12345A")).getInstance());
         synchronized (mutex) {
             mutex.wait(100);
         }

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/conversation/ConversationMaxAgeExpireTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/conversation/ConversationMaxAgeExpireTestCase.java?view=diff&rev=516851&r1=516850&r2=516851
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/conversation/ConversationMaxAgeExpireTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/conversation/ConversationMaxAgeExpireTestCase.java Sat Mar 10 20:40:39 2007
@@ -58,7 +58,7 @@
         // start the conversation
         handler.invoke(operation1, null);
         // verify the instance was persisted
-        assertEquals(targetInstance, store.readRecord(target, "12345A"));
+        assertEquals(targetInstance, ((InstanceWrapper)store.readRecord(target, "12345A")).getInstance());
         synchronized (mutex) {
             mutex.wait(100);
         }

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/conversation/ConversationStartStopEndTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/conversation/ConversationStartStopEndTestCase.java?view=diff&rev=516851&r1=516850&r2=516851
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/conversation/ConversationStartStopEndTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/integration/conversation/ConversationStartStopEndTestCase.java Sat Mar 10 20:40:39 2007
@@ -27,6 +27,7 @@
 
 import org.apache.tuscany.spi.ObjectCreationException;
 import org.apache.tuscany.spi.component.AtomicComponent;
+import org.apache.tuscany.spi.component.InstanceWrapper;
 import static org.apache.tuscany.spi.model.Scope.CONVERSATION;
 import org.apache.tuscany.spi.wire.InvocationChain;
 import org.apache.tuscany.spi.wire.Wire;
@@ -59,11 +60,11 @@
         // start the conversation
         handler.invoke(operation1, null);
         // verify the instance was persisted
-        assertEquals(targetInstance, store.readRecord(target, "12345A"));
+        assertEquals(targetInstance, ((InstanceWrapper)store.readRecord(target, "12345A")).getInstance());
         // continue the conversation
         handler.invoke(operation2, null);
         // verify the instance was persisted
-        assertEquals(targetInstance, store.readRecord(target, "12345A"));
+        assertEquals(targetInstance, ((InstanceWrapper)store.readRecord(target, "12345A")).getInstance());
         // end the conversation
         handler.invoke(endOperation, null);
         workContext.clearIdentifier(CONVERSATION);

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/ScopeContainer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/ScopeContainer.java?view=diff&rev=516851&r1=516850&r2=516851
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/ScopeContainer.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/ScopeContainer.java Sat Mar 10 20:40:39 2007
@@ -41,10 +41,34 @@
     void register(AtomicComponent component);
 
     /**
+     * Returns an instance wrapper associated with the current scope context, creating one if necessary
+     *
+     * @param component the component
+     * @throws TargetResolutionException
+     */
+    <T> InstanceWrapper<T> getWrapper(AtomicComponent component) throws TargetResolutionException;
+
+    /**
+     * Returns an implementation instance associated with the current scope context.
+     * If no instance is found, a {@link TargetNotFoundException} is thrown.
+     *
+     * @throws TargetResolutionException
+     */
+    <T> InstanceWrapper<T> getAssociatedWrapper(AtomicComponent component) throws TargetResolutionException;
+
+    /**
+     * Return a wrapper after use (for example, after invoking the instance).
+     *  
+     * @param component the component
+     */
+    <T> void returnWrapper(AtomicComponent component, InstanceWrapper<T> wrapper) throws TargetDestructionException;
+
+    /**
      * Returns an implementation instance associated with the current request context, creating one if necessary
      *
      * @throws TargetResolutionException
      */
+    @Deprecated
     Object getInstance(AtomicComponent component) throws TargetResolutionException;
 
     /**
@@ -53,6 +77,7 @@
      *
      * @throws TargetResolutionException
      */
+    @Deprecated
     Object getAssociatedInstance(AtomicComponent component) throws TargetResolutionException;
 
     /**



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