You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by ka...@apache.org on 2011/03/17 22:29:45 UTC

svn commit: r1082708 - in /tapestry/tapestry5/trunk/tapestry-ioc/src: main/java/org/apache/tapestry5/ioc/internal/ main/java/org/apache/tapestry5/ioc/services/ test/java/org/apache/tapestry5/ioc/

Author: kaosko
Date: Thu Mar 17 21:29:44 2011
New Revision: 1082708

URL: http://svn.apache.org/viewvc?rev=1082708&view=rev
Log:
TAP5-1320: Applied Tom van Dijk's patch for adding getMarkers() and
perthread service support to ServiceActivity without changes

Modified:
    tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java
    tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ServiceActivityTrackerImpl.java
    tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/ServiceActivity.java
    tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntegrationTest.java

Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java?rev=1082708&r1=1082707&r2=1082708&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java Thu Mar 17 21:29:44 2011
@@ -163,16 +163,16 @@ public class RegistryImpl implements Reg
 
         operationTracker = new PerThreadOperationTracker(loggerSource.getLogger(Registry.class));
 
-        final ServiceActivityTrackerImpl scoreboardAndTracker = new ServiceActivityTrackerImpl();
-
-        tracker = scoreboardAndTracker;
-
         this.classFactory = classFactory;
 
         Logger logger = loggerForBuiltinService(PERTHREAD_MANAGER_SERVICE_ID);
 
         perthreadManager = new PerthreadManagerImpl(logger);
 
+        final ServiceActivityTrackerImpl scoreboardAndTracker = new ServiceActivityTrackerImpl(perthreadManager);
+
+        tracker = scoreboardAndTracker;
+
         logger = loggerForBuiltinService(REGISTRY_SHUTDOWN_HUB_SERVICE_ID);
 
         registryShutdownHub = new RegistryShutdownHubImpl(logger);

Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ServiceActivityTrackerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ServiceActivityTrackerImpl.java?rev=1082708&r1=1082707&r2=1082708&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ServiceActivityTrackerImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ServiceActivityTrackerImpl.java Thu Mar 17 21:29:44 2011
@@ -22,7 +22,11 @@ import org.apache.tapestry5.ioc.services
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.TreeMap;
+import org.apache.tapestry5.ioc.ScopeConstants;
+import org.apache.tapestry5.ioc.services.PerThreadValue;
+import org.apache.tapestry5.ioc.services.PerthreadManager;
 
 public class ServiceActivityTrackerImpl implements ServiceActivityScoreboard,
         ServiceActivityTracker
@@ -33,10 +37,19 @@ public class ServiceActivityTrackerImpl 
 
         private Status status;
 
-        public MutableServiceActivity(ServiceDef serviceDef, Status status)
+        private final PerThreadValue<Status> perThreadStatus;
+
+        public MutableServiceActivity(ServiceDef serviceDef, PerthreadManager perthreadManager, Status status)
         {
             this.serviceDef = serviceDef;
-            this.status = status;
+            if (serviceDef.getServiceScope().equals(ScopeConstants.PERTHREAD)) {
+                perThreadStatus = perthreadManager.createValue();
+                perThreadStatus.set(status);
+                this.status = status; // this is now the default status
+            } else {
+                perThreadStatus = null;
+                this.status = status;
+            }
         }
 
         public String getServiceId()
@@ -54,19 +67,35 @@ public class ServiceActivityTrackerImpl 
             return serviceDef.getServiceScope();
         }
 
+        public Set<Class> getMarkers()
+        {
+            return serviceDef.getMarkers();
+        }
+
         // Mutable properties must be synchronized
 
         public synchronized Status getStatus()
         {
-            return status;
+            if (perThreadStatus != null) {
+                if (!perThreadStatus.exists()) perThreadStatus.set(status);
+                return perThreadStatus.get();
+            }
+            else return status;
         }
 
         synchronized void setStatus(Status status)
         {
-            this.status = status;
+            if (perThreadStatus != null) perThreadStatus.set(status);
+            else this.status = status;
         }
     }
 
+    private final PerthreadManager perthreadManager;
+
+    public ServiceActivityTrackerImpl(PerthreadManager perthreadManager) {
+        this.perthreadManager = perthreadManager;
+    }
+
     /**
      * Tree map keeps everything in order by key (serviceId).
      */
@@ -101,7 +130,7 @@ public class ServiceActivityTrackerImpl 
     public synchronized void define(ServiceDef serviceDef, Status initialStatus)
     {
         serviceIdToServiceStatus.put(serviceDef.getServiceId(), new MutableServiceActivity(
-                serviceDef, initialStatus));
+                serviceDef, perthreadManager, initialStatus));
     }
 
     public synchronized void setStatus(String serviceId, Status status)

Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/ServiceActivity.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/ServiceActivity.java?rev=1082708&r1=1082707&r2=1082708&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/ServiceActivity.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/ServiceActivity.java Thu Mar 17 21:29:44 2011
@@ -14,6 +14,7 @@
 
 package org.apache.tapestry5.ioc.services;
 
+import java.util.Set;
 import org.apache.tapestry5.ioc.def.ServiceDef;
 
 /**
@@ -42,4 +43,9 @@ public interface ServiceActivity
      * Indicates the lifecycle status of the service.
      */
     Status getStatus();
+
+    /**
+     * The markers on this service
+     */
+    Set<Class> getMarkers();
 }

Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntegrationTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntegrationTest.java?rev=1082708&r1=1082707&r2=1082708&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntegrationTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/IntegrationTest.java Thu Mar 17 21:29:44 2011
@@ -866,20 +866,71 @@ public class IntegrationTest extends IOC
             if (serviceId.equals("ClassFactory"))
                 assertEquals(a.getStatus(), Status.BUILTIN);
 
-            if (serviceId.equals("RedGreeter1"))
+            if (serviceId.equals("RedGreeter1")) {
                 assertEquals(a.getStatus(), Status.DEFINED);
+                assertEquals(a.getMarkers().contains(BlueMarker.class), false);
+                assertEquals(a.getMarkers().contains(RedMarker.class), true);
+            }
 
             if (serviceId.equals("TypeCoercer"))
                 assertEquals(a.getStatus(), Status.REAL);
 
-            if (serviceId.equals("BlueGreeter"))
+            if (serviceId.equals("BlueGreeter")) {
                 assertEquals(a.getStatus(), Status.VIRTUAL);
+                assertEquals(a.getMarkers().contains(BlueMarker.class), true);
+                assertEquals(a.getMarkers().contains(RedMarker.class), false);
+            }
         }
 
         r.shutdown();
     }
 
     @Test
+    public void service_activity_scoreboard_perthread() throws InterruptedException
+    {
+        final Registry r = buildRegistry(GreeterModule.class, PerThreadModule.class);
+
+        ServiceActivityScoreboard scoreboard = r.getService(ServiceActivityScoreboard.class);
+
+        // Force the state of a few services.
+
+        final StringHolder holder = r.getService(StringHolder.class);
+
+        Runnable runnable = new Runnable()
+        {
+            public void run()
+            {
+                holder.setValue("barney");
+                assertEquals(holder.getValue(), "barney");
+
+                r.cleanupThread();
+            }
+        };
+
+        Thread t = new Thread(runnable);
+
+        t.start();
+        t.join();
+
+        // Now get the activity list and poke around.
+
+        List<ServiceActivity> serviceActivity = scoreboard.getServiceActivity();
+
+        assertTrue(serviceActivity.size() > 0);
+
+        for (ServiceActivity a : serviceActivity)
+        {
+            String serviceId = a.getServiceId();
+
+            if (serviceId.equals("StringHolder"))
+                assertEquals(a.getStatus(), Status.VIRTUAL);
+        }
+
+        r.cleanupThread();
+        r.shutdown();
+    }
+
+    @Test
     public void proxy_autobuild_object()
     {
         Registry r = buildRegistry();