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();