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/09 13:39:54 UTC

svn commit: r494393 - in /incubator/tuscany/java/sca/kernel/core/src: main/java/org/apache/tuscany/core/component/scope/ test/java/org/apache/tuscany/core/component/scope/

Author: jmarino
Date: Tue Jan  9 04:39:54 2007
New Revision: 494393

URL: http://svn.apache.org/viewvc?view=rev&rev=494393
Log:
support init of conversation scoped implementations and explicit destruction

Modified:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainer.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/component/scope/ConversationalScopeInstanceLifecycleTestCase.java

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=494393&r1=494392&r2=494393
==============================================================================
--- 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 Tue Jan  9 04:39:54 2007
@@ -25,6 +25,7 @@
 import org.apache.tuscany.spi.component.PersistenceException;
 import org.apache.tuscany.spi.component.ScopeContainer;
 import org.apache.tuscany.spi.component.ScopeContainerMonitor;
+import org.apache.tuscany.spi.component.TargetDestructionException;
 import org.apache.tuscany.spi.component.TargetNotFoundException;
 import org.apache.tuscany.spi.component.TargetResolutionException;
 import org.apache.tuscany.spi.component.WorkContext;
@@ -85,13 +86,13 @@
                     long expire = System.currentTimeMillis() + component.getMaxIdleTime();
                     nonDurableStore.updateRecord(component, conversationId, instance, expire);
                 }
-                return instance;
             } else {
-                Object o = component.createInstance();
+                instance = component.createInstance();
                 long expire = calculateExpiration(component);
-                nonDurableStore.insertRecord(component, conversationId, o, expire);
-                return o;
+                nonDurableStore.insertRecord(component, conversationId, instance, expire);
+                component.init(instance);
             }
+            return instance;
         } catch (StoreReadException e) {
             throw new TargetResolutionException("Error retrieving target instance", e);
         } catch (StoreWriteException e) {
@@ -146,8 +147,17 @@
     public void remove(AtomicComponent component) throws PersistenceException {
         String conversationId = getConversationId();
         try {
-            nonDurableStore.removeRecord(component, conversationId);
+            workContext.setCurrentAtomicComponent(component);
+            Object instance = nonDurableStore.readRecord(component, conversationId);
+            if (instance != null) {
+                component.destroy(instance);
+                nonDurableStore.removeRecord(component, conversationId);
+            }
+        } catch (StoreReadException e) {
+            throw new PersistenceException(e);
         } catch (StoreWriteException e) {
+            throw new PersistenceException(e);
+        } catch (TargetDestructionException e) {
             throw new PersistenceException(e);
         }
     }

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=494393&r1=494392&r2=494393
==============================================================================
--- 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 Tue Jan  9 04:39:54 2007
@@ -50,6 +50,7 @@
         component.addListener(EasyMock.eq(container));
         EasyMock.expect(component.createInstance()).andReturn(new Foo());
         EasyMock.expect(component.getMaxAge()).andReturn(600000L).atLeastOnce();
+        component.init(EasyMock.isA(Object.class));
         EasyMock.replay(component);
         container.register(component);
         assertTrue(container.getInstance(component) instanceof Foo);
@@ -97,6 +98,7 @@
         AtomicComponent component = EasyMock.createMock(AtomicComponent.class);
         component.addListener(EasyMock.eq(container));
         EasyMock.expect(component.getMaxIdleTime()).andReturn(-1L).atLeastOnce();
+        component.destroy(EasyMock.isA(Object.class));
         EasyMock.expect(component.getName()).andReturn("foo").atLeastOnce();
         EasyMock.replay(component);
         container.register(component);
@@ -119,8 +121,10 @@
         AtomicComponent component = EasyMock.createMock(AtomicComponent.class);
         component.addListener(EasyMock.eq(container));
         EasyMock.expect(component.getMaxAge()).andReturn(600000L).atLeastOnce();
+        component.init(EasyMock.isA(Object.class));
         EasyMock.expect(component.getMaxIdleTime()).andReturn(-1L).atLeastOnce();
         EasyMock.expect(component.createInstance()).andReturn(new Foo());
+        component.destroy(EasyMock.isA(Object.class));
         EasyMock.replay(component);
         container.register(component);
         Foo foo = new Foo();

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeInstanceLifecycleTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeInstanceLifecycleTestCase.java?view=diff&rev=494393&r1=494392&r2=494393
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeInstanceLifecycleTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeInstanceLifecycleTestCase.java Tue Jan  9 04:39:54 2007
@@ -19,7 +19,6 @@
 package org.apache.tuscany.core.component.scope;
 
 import org.apache.tuscany.spi.component.AtomicComponent;
-import org.apache.tuscany.spi.component.TargetException;
 import org.apache.tuscany.spi.component.WorkContext;
 import org.apache.tuscany.spi.event.RuntimeEventListener;
 import org.apache.tuscany.spi.model.Scope;
@@ -27,20 +26,11 @@
 
 import junit.framework.TestCase;
 import org.apache.tuscany.core.component.WorkContextImpl;
-import org.apache.tuscany.core.component.event.ConversationEnd;
-import org.apache.tuscany.core.component.event.ConversationStart;
-import org.apache.tuscany.core.mock.component.OrderedInitPojo;
-import org.apache.tuscany.core.mock.component.OrderedInitPojoImpl;
 import org.apache.tuscany.core.services.store.memory.MemoryStore;
 import org.easymock.EasyMock;
-import org.easymock.IAnswer;
 
 /**
  * Lifecycle unit tests for the conversational scope container
- * <p/>
- * TODO [JFM] these tests should be removed since conversational components will not have init/destroy semantics. We may
- * want to have init() supported but not destroy() since passivated instances will nned to be deserialized upon
- * expiration
  *
  * @version $Rev: 451895 $ $Date: 2006-10-02 02:58:18 -0400 (Mon, 02 Oct 2006) $
  */
@@ -58,94 +48,20 @@
         Foo comp = new Foo();
         AtomicComponent component = EasyMock.createMock(AtomicComponent.class);
         EasyMock.expect(component.createInstance()).andReturn(comp);
-        //EasyMock.expect(component.isEagerInit()).andReturn(true).atLeastOnce();
+        component.init(EasyMock.eq(comp));
         EasyMock.expect(component.getMaxAge()).andReturn(1L).anyTimes();
         component.addListener(EasyMock.isA(RuntimeEventListener.class));
-        //component.init(EasyMock.eq(comp));
-        //component.destroy(EasyMock.eq(comp));
+        component.destroy(EasyMock.eq(comp));
         EasyMock.replay(component);
         scope.register(component);
         String convID = "ConvID";
         ctx.setIdentifier(Scope.CONVERSATION, convID);
-        scope.onEvent(new ConversationStart(this, convID));
         assertNotNull(scope.getInstance(component));
         // expire
-        scope.onEvent(new ConversationEnd(this, convID));
+        scope.remove(component);
         scope.stop();
         EasyMock.verify(component);
         scope.stop();
-    }
-
-    public void txestDestroyOrder() throws Exception {
-        StoreMonitor monitor = EasyMock.createMock(StoreMonitor.class);
-        monitor.start(EasyMock.isA(String.class));
-        monitor.stop(EasyMock.isA(String.class));
-        MemoryStore store = new MemoryStore(monitor);
-        WorkContext ctx = new WorkContextImpl();
-        ConversationalScopeContainer scope = new ConversationalScopeContainer(store, ctx, null);
-        scope.start();
-
-        AtomicComponent oneComponent = createComponent(false);
-        scope.register(oneComponent);
-        AtomicComponent twoComponent = createComponent(false);
-        scope.register(twoComponent);
-        AtomicComponent threeComponent = createComponent(false);
-        scope.register(threeComponent);
-
-        String convID = "ConvID";
-        ctx.setIdentifier(Scope.CONVERSATION, convID);
-        scope.onEvent(new ConversationStart(this, convID));
-        OrderedInitPojo one = (OrderedInitPojo) scope.getInstance(oneComponent);
-        assertNotNull(one);
-        assertEquals(1, one.getNumberInstantiated());
-        assertEquals(1, one.getInitOrder());
-
-        OrderedInitPojo two = (OrderedInitPojo) scope.getInstance(twoComponent);
-        assertNotNull(two);
-        assertEquals(2, two.getNumberInstantiated());
-        assertEquals(2, two.getInitOrder());
-
-        OrderedInitPojo three = (OrderedInitPojo) scope.getInstance(threeComponent);
-        assertNotNull(three);
-        assertEquals(3, three.getNumberInstantiated());
-        assertEquals(3, three.getInitOrder());
-
-        scope.onEvent(new ConversationEnd(this, convID));
-        assertEquals(0, one.getNumberInstantiated());
-        scope.stop();
-        EasyMock.verify(oneComponent);
-        EasyMock.verify(twoComponent);
-        EasyMock.verify(threeComponent);
-    }
-
-    @SuppressWarnings("unchecked")
-    private AtomicComponent createComponent(boolean init) throws TargetException {
-        AtomicComponent component = EasyMock.createMock(AtomicComponent.class);
-        EasyMock.expect(component.createInstance()).andStubAnswer(new IAnswer() {
-            public Object answer() throws Throwable {
-                return new OrderedInitPojoImpl();
-            }
-        });
-        EasyMock.expect(component.isEagerInit()).andReturn(init).atLeastOnce();
-        component.addListener(EasyMock.isA(RuntimeEventListener.class));
-        component.init(EasyMock.isA(OrderedInitPojoImpl.class));
-        EasyMock.expectLastCall().andAnswer(new IAnswer() {
-            public Object answer() throws Throwable {
-                OrderedInitPojoImpl pojo = (OrderedInitPojoImpl) EasyMock.getCurrentArguments()[0];
-                pojo.init();
-                return null;
-            }
-        });
-        component.destroy(EasyMock.isA(OrderedInitPojoImpl.class));
-        EasyMock.expectLastCall().andAnswer(new IAnswer() {
-            public Object answer() throws Throwable {
-                OrderedInitPojoImpl pojo = (OrderedInitPojoImpl) EasyMock.getCurrentArguments()[0];
-                pojo.destroy();
-                return null;
-            }
-        });
-        EasyMock.replay(component);
-        return component;
     }
 
     private class Foo {



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