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 2006/05/05 06:00:18 UTC

svn commit: r399943 - in /incubator/tuscany/sandbox/jboynes/sca/core2/src: main/java/org/apache/tuscany/core/context/event/ main/java/org/apache/tuscany/core/context/scope/ test/java/org/apache/tuscany/core/context/scope/

Author: jmarino
Date: Thu May  4 21:00:17 2006
New Revision: 399943

URL: http://svn.apache.org/viewcvs?rev=399943&view=rev
Log:
scope refactors and testcases

Added:
    incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/context/scope/BasicHttpSessionScopeTestCase.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/context/scope/BasicRequestScopeTestCase.java
Modified:
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/AbstractRequestEvent.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/RequestEnd.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/RequestEvent.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/RequestStart.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/scope/CompositeScopeContext.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/scope/HttpSessionScopeContext.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/scope/RequestScopeContext.java

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/AbstractRequestEvent.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/AbstractRequestEvent.java?rev=399943&r1=399942&r2=399943&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/AbstractRequestEvent.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/AbstractRequestEvent.java Thu May  4 21:00:17 2006
@@ -20,21 +20,13 @@
  */
 public abstract class AbstractRequestEvent extends AbstractEvent implements RequestEvent {
 
-    private Object id;
-
     /**
      * Creates a new event
      * @param source the source of the event
-     * @param id the id of the request associated with the event
      */
-     public AbstractRequestEvent(Object source, Object id) {
+     public AbstractRequestEvent(Object source) {
          super(source);
-         assert (id !=null): "Request id was null";
-         this.id = id;
      }
 
-    public Object getId(){
-        return id;
-    }
 
 }

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/RequestEnd.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/RequestEnd.java?rev=399943&r1=399942&r2=399943&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/RequestEnd.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/RequestEnd.java Thu May  4 21:00:17 2006
@@ -23,10 +23,9 @@
     /**
      * Creates a new event
      * @param source the source of the event
-     * @param id the id of the completed/ended request
      */
-     public RequestEnd(Object source, Object id) {
-         super(source,id);
+     public RequestEnd(Object source) {
+         super(source);
      }
 
 

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/RequestEvent.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/RequestEvent.java?rev=399943&r1=399942&r2=399943&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/RequestEvent.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/RequestEvent.java Thu May  4 21:00:17 2006
@@ -19,9 +19,4 @@
  */
 public interface RequestEvent {
 
-    /**
-     * Returns the id of the request the event is associated with
-     */
-      public Object getId();
-
 }

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/RequestStart.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/RequestStart.java?rev=399943&r1=399942&r2=399943&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/RequestStart.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/event/RequestStart.java Thu May  4 21:00:17 2006
@@ -23,10 +23,9 @@
     /**
      * Creates a new event
      * @param source the source of the event
-     * @param id the id of the request being started
      */
-     public RequestStart(Object source, Object id) {
-         super(source,id);
+     public RequestStart(Object source) {
+         super(source);
      }
 
 }

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/scope/CompositeScopeContext.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/scope/CompositeScopeContext.java?rev=399943&r1=399942&r2=399943&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/scope/CompositeScopeContext.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/scope/CompositeScopeContext.java Thu May  4 21:00:17 2006
@@ -57,6 +57,7 @@
     }
 
     public void stop() throws ScopeRuntimeException {
+        lifecycleState = STOPPED;
     }
 
     public void onEvent(Event event) {

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/scope/HttpSessionScopeContext.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/scope/HttpSessionScopeContext.java?rev=399943&r1=399942&r2=399943&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/scope/HttpSessionScopeContext.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/scope/HttpSessionScopeContext.java Thu May  4 21:00:17 2006
@@ -33,7 +33,7 @@
     }
 
     public Scope getScope() {
-        return Scope.REQUEST;
+        return Scope.SESSION;
     }
 
     public void onEvent(Event event) {
@@ -60,6 +60,7 @@
         if (lifecycleState != UNINITIALIZED) {
             throw new IllegalStateException("Scope must be in UNINITIALIZED state [" + lifecycleState + "]");
         }
+        lifecycleState = RUNNING;
     }
 
     public synchronized void stop() {
@@ -75,10 +76,11 @@
 
     public InstanceContext getInstanceContext(AtomicContext context) throws TargetException {
         Map<Object, InstanceContext> contextMap = contexts.get(context);
-        InstanceContext ctx = contextMap.get(workContext.getIdentifier(HTTP_IDENTIFIER));
+        Object key = workContext.getIdentifier(HTTP_IDENTIFIER);
+        InstanceContext ctx = contextMap.get(key);
         if (ctx == null) {
             ctx = context.createInstance();
-            contextMap.put(context, ctx);
+            contextMap.put(key, ctx);
         }
         return ctx;
     }
@@ -86,6 +88,9 @@
     private void shutdownInstances(Object key) {
         List<InstanceContext> destroyQueue = destroyQueues.get(key);
         if (destroyQueue != null) {
+            for (Map<Object, InstanceContext> map : contexts.values()) {
+                map.remove(key);
+            }
             for (InstanceContext ctx : destroyQueue) {
                 ctx.stop();
             }

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/scope/RequestScopeContext.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/scope/RequestScopeContext.java?rev=399943&r1=399942&r2=399943&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/scope/RequestScopeContext.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/context/scope/RequestScopeContext.java Thu May  4 21:00:17 2006
@@ -22,7 +22,7 @@
 public class RequestScopeContext extends AbstractScopeContext<AtomicContext> {
 
     private final Map<AtomicContext, Map<Thread, InstanceContext>> contexts;
-    private final Map<Thread,List<InstanceContext>> destroyQueues;
+    private final Map<Thread, List<InstanceContext>> destroyQueues;
 
     public RequestScopeContext(WorkContext workContext) {
         super("Request Scope", workContext);
@@ -38,14 +38,14 @@
         checkInit();
         if (event instanceof RequestEnd) {
             checkInit();
-            shutdownInstances();
+            shutdownInstances(Thread.currentThread());
         } else if (event instanceof InstanceCreated) {
             checkInit();
             InstanceContext context = ((InstanceCreated) event).getContext();
             List<InstanceContext> destroyQueue = destroyQueues.get(Thread.currentThread());
-            if (destroyQueue == null){
+            if (destroyQueue == null) {
                 destroyQueue = new ArrayList<InstanceContext>();
-                destroyQueues.put(Thread.currentThread(),destroyQueue);
+                destroyQueues.put(Thread.currentThread(), destroyQueue);
             }
             synchronized (destroyQueue) {
                 destroyQueue.add(context);
@@ -57,6 +57,7 @@
         if (lifecycleState != UNINITIALIZED) {
             throw new IllegalStateException("Scope must be in UNINITIALIZED state [" + lifecycleState + "]");
         }
+        lifecycleState = RUNNING;
     }
 
     public synchronized void stop() {
@@ -79,11 +80,17 @@
         return ctx;
     }
 
-    private void shutdownInstances() {
-        List<InstanceContext> destroyQueue = destroyQueues.get(Thread.currentThread());
-        synchronized (destroyQueue) {
-            for (InstanceContext ctx : destroyQueue) {
-                ctx.stop();
+    private void shutdownInstances(Thread key) {
+        List<InstanceContext> destroyQueue = destroyQueues.remove(key);
+        if (destroyQueue != null && destroyQueue.size() > 0) {
+            synchronized (destroyQueue) {
+                Thread thread = Thread.currentThread();
+                for (Map<Thread, InstanceContext> map : contexts.values()) {
+                    map.remove(thread);
+                }
+                for (InstanceContext ctx : destroyQueue) {
+                    ctx.stop();
+                }
             }
         }
     }

Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/context/scope/BasicHttpSessionScopeTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/context/scope/BasicHttpSessionScopeTestCase.java?rev=399943&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/context/scope/BasicHttpSessionScopeTestCase.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/context/scope/BasicHttpSessionScopeTestCase.java Thu May  4 21:00:17 2006
@@ -0,0 +1,88 @@
+package org.apache.tuscany.core.context.scope;
+
+import junit.framework.TestCase;
+import org.apache.tuscany.common.ObjectFactory;
+import org.apache.tuscany.core.context.WorkContextImpl;
+import org.apache.tuscany.core.context.event.HttpSessionEnd;
+import org.apache.tuscany.core.injection.EventInvoker;
+import org.apache.tuscany.core.injection.MethodEventInvoker;
+import org.apache.tuscany.core.injection.PojoObjectFactory;
+import org.apache.tuscany.core.mock.component.SessionScopeInitDestroyComponent;
+import org.apache.tuscany.core.mock.context.MockCompositeContext;
+import org.apache.tuscany.core.system.context.SystemAtomicContext;
+import org.apache.tuscany.spi.context.CompositeContext;
+import org.apache.tuscany.spi.context.WorkContext;
+
+/**
+ * @version $$Rev$$ $$Date$$
+ */
+public class BasicHttpSessionScopeTestCase extends TestCase {
+
+    private EventInvoker<Object> initInvoker;
+    private EventInvoker<Object> destroyInvoker;
+    private ObjectFactory<?> factory;
+
+    public void testLifecycleManagement() throws Exception {
+        WorkContext workContext = new WorkContextImpl();
+        CompositeContext currentModule = new MockCompositeContext();
+        HttpSessionScopeContext scopeContext = new HttpSessionScopeContext(workContext);
+        scopeContext.start();
+        SystemAtomicContext atomicContext = createContext();
+        atomicContext.setScopeContext(scopeContext);
+        // start the request
+        workContext.setCurrentModule(currentModule);
+        Object session = new Object();
+        workContext.setIdentifier(HttpSessionScopeContext.HTTP_IDENTIFIER, session);
+        SessionScopeInitDestroyComponent o1 = (SessionScopeInitDestroyComponent) scopeContext.getInstance(atomicContext);
+        assertTrue(o1.isInitialized());
+        assertFalse(o1.isDestroyed());
+        SessionScopeInitDestroyComponent o2 = (SessionScopeInitDestroyComponent) scopeContext.getInstance(atomicContext);
+        assertSame(o1, o2);
+        scopeContext.onEvent(new HttpSessionEnd(this, session));
+        assertTrue(o1.isDestroyed());
+        scopeContext.stop();
+    }
+
+    public void testSessionIsolation() throws Exception {
+        WorkContext workContext = new WorkContextImpl();
+        CompositeContext currentModule = new MockCompositeContext();
+        HttpSessionScopeContext scopeContext = new HttpSessionScopeContext(workContext);
+        scopeContext.start();
+
+        SystemAtomicContext atomicContext = createContext();
+        atomicContext.setScopeContext(scopeContext);
+
+        workContext.setCurrentModule(currentModule);
+        Object session1 = new Object();
+        workContext.setIdentifier(HttpSessionScopeContext.HTTP_IDENTIFIER, session1);
+        SessionScopeInitDestroyComponent o1 = (SessionScopeInitDestroyComponent) scopeContext.getInstance(atomicContext);
+        assertTrue(o1.isInitialized());
+
+        Object session2 = new Object();
+        workContext.setIdentifier(HttpSessionScopeContext.HTTP_IDENTIFIER, session2);
+        SessionScopeInitDestroyComponent o2 = (SessionScopeInitDestroyComponent) scopeContext.getInstance(atomicContext);
+        assertNotSame(o1, o2);
+
+        scopeContext.onEvent(new HttpSessionEnd(this, session1));
+        assertTrue(o1.isDestroyed());
+        assertFalse(o2.isDestroyed());
+        scopeContext.onEvent(new HttpSessionEnd(this, session2));
+        assertTrue(o2.isDestroyed());
+        scopeContext.stop();
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        factory = new PojoObjectFactory<SessionScopeInitDestroyComponent>(SessionScopeInitDestroyComponent.class.getConstructor((Class[]) null), null, null);
+        initInvoker = new MethodEventInvoker<Object>(SessionScopeInitDestroyComponent.class.getMethod("init", (Class[]) null));
+        destroyInvoker = new MethodEventInvoker<Object>(SessionScopeInitDestroyComponent.class.getMethod("destroy", (Class[]) null));
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    private SystemAtomicContext createContext() {
+        return new SystemAtomicContext("foo", factory, false, initInvoker, destroyInvoker);
+    }
+}

Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/context/scope/BasicRequestScopeTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/context/scope/BasicRequestScopeTestCase.java?rev=399943&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/context/scope/BasicRequestScopeTestCase.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/context/scope/BasicRequestScopeTestCase.java Thu May  4 21:00:17 2006
@@ -0,0 +1,80 @@
+package org.apache.tuscany.core.context.scope;
+
+import junit.framework.TestCase;
+import org.apache.tuscany.common.ObjectFactory;
+import org.apache.tuscany.core.context.WorkContextImpl;
+import org.apache.tuscany.core.context.event.RequestEnd;
+import org.apache.tuscany.core.injection.EventInvoker;
+import org.apache.tuscany.core.injection.MethodEventInvoker;
+import org.apache.tuscany.core.injection.PojoObjectFactory;
+import org.apache.tuscany.core.mock.component.RequestScopeInitDestroyComponent;
+import org.apache.tuscany.core.mock.context.MockCompositeContext;
+import org.apache.tuscany.core.system.context.SystemAtomicContext;
+import org.apache.tuscany.spi.context.CompositeContext;
+import org.apache.tuscany.spi.context.WorkContext;
+
+/**
+ * @version $$Rev$$ $$Date$$
+ */
+public class BasicRequestScopeTestCase extends TestCase {
+
+    private EventInvoker<Object> initInvoker;
+    private EventInvoker<Object> destroyInvoker;
+    private ObjectFactory<?> factory;
+
+    public void testLifecycleManagement() throws Exception {
+        WorkContext workContext = new WorkContextImpl();
+        CompositeContext currentModule = new MockCompositeContext();
+        RequestScopeContext scopeContext = new RequestScopeContext(workContext);
+        scopeContext.start();
+        SystemAtomicContext atomicContext = createContext();
+        atomicContext.setScopeContext(scopeContext);
+        // start the request
+        workContext.setCurrentModule(currentModule);
+        RequestScopeInitDestroyComponent o1 = (RequestScopeInitDestroyComponent) scopeContext.getInstance(atomicContext);
+        assertTrue(o1.isInitialized());
+        assertFalse(o1.isDestroyed());
+        RequestScopeInitDestroyComponent o2 = (RequestScopeInitDestroyComponent) scopeContext.getInstance(atomicContext);
+        assertSame(o1, o2);
+        scopeContext.onEvent(new RequestEnd(this));
+        assertTrue(o1.isDestroyed());
+        scopeContext.stop();
+    }
+
+    public void testRequestIsolation() throws Exception {
+        WorkContext workContext = new WorkContextImpl();
+        CompositeContext currentModule = new MockCompositeContext();
+        RequestScopeContext scopeContext = new RequestScopeContext(workContext);
+        scopeContext.start();
+
+        SystemAtomicContext atomicContext = createContext();
+        atomicContext.setScopeContext(scopeContext);
+
+        workContext.setCurrentModule(currentModule);
+        RequestScopeInitDestroyComponent o1 = (RequestScopeInitDestroyComponent) scopeContext.getInstance(atomicContext);
+        assertTrue(o1.isInitialized());
+        scopeContext.onEvent(new RequestEnd(this));
+        assertTrue(o1.isDestroyed());
+
+        RequestScopeInitDestroyComponent o2 = (RequestScopeInitDestroyComponent) scopeContext.getInstance(atomicContext);
+        assertNotSame(o1, o2);
+        scopeContext.onEvent(new RequestEnd(this));
+        assertTrue(o2.isDestroyed());
+        scopeContext.stop();
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        factory = new PojoObjectFactory<RequestScopeInitDestroyComponent>(RequestScopeInitDestroyComponent.class.getConstructor((Class[]) null), null, null);
+        initInvoker = new MethodEventInvoker<Object>(RequestScopeInitDestroyComponent.class.getMethod("init", (Class[]) null));
+        destroyInvoker = new MethodEventInvoker<Object>(RequestScopeInitDestroyComponent.class.getMethod("destroy", (Class[]) null));
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    private SystemAtomicContext createContext() {
+        return new SystemAtomicContext("foo", factory, false, initInvoker, destroyInvoker);
+    }
+}