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