Author: hlship
Date: Mon Mar 5 10:27:51 2007
New Revision: 514773
URL: http://svn.apache.org/viewvc?view=rev&rev=514773
Log:
TAPESTRY-1291: Tighten up some synchronized collection access and add
additional tests and checks for threading errors.
Modified:
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/ModuleImpl.java
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/OneShotServiceCreator.java
Modified:
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/ModuleImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/ModuleImpl.java?view=diff&rev=514773&r1=514772&r2=514773
==============================================================================
---
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/ModuleImpl.java
(original)
+++
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/ModuleImpl.java
Mon Mar 5 10:27:51 2007
@@ -57,6 +57,7 @@
private final Log _log;
+ // Guarded by MUTEX
private Object _moduleBuilder;
private final static String INTERNAL_MODULE_ID = "tapestry.ioc";
@@ -70,8 +71,7 @@
// Set to true when invoking the module constructor. Used to
// detect endless loops caused by irresponsible dependencies in
- // the constructor.
-
+ // the constructor. Guarded by MUTEX.
private boolean _insideConstructor;
public ModuleImpl(InternalRegistry registry, ModuleDef moduleDef, Log log)
Modified:
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/OneShotServiceCreator.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/OneShotServiceCreator.java?view=diff&rev=514773&r1=514772&r2=514773
==============================================================================
---
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/OneShotServiceCreator.java
(original)
+++
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/OneShotServiceCreator.java
Mon Mar 5 10:27:51 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -12,48 +12,43 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.tapestry.ioc.internal;
-
-import org.apache.tapestry.ioc.ObjectCreator;
-import org.apache.tapestry.ioc.def.ServiceDef;
-
-/**
- * Decorator for [EMAIL PROTECTED] org.apache.tapestry.ioc.ObjectCreator} that
ensures the service is only
- * created once. This detects a situation where the service builder for a
service directly or
- * indirectly invokes methods on the service itself. This would show up as a
second call up the
- * ServiceCreator stack injected into the proxy.
- * <p>
- * We could use the [EMAIL PROTECTED]
org.apache.tapestry.internal.annotations.OneShot} annotation, but this
- * implementation gives us a bit more flexibility to report the error.
- *
- *
- */
-public class OneShotServiceCreator implements ObjectCreator
-{
- private final ServiceDef _serviceDef;
-
- private final ObjectCreator _delegate;
-
- private boolean _locked;
-
- public OneShotServiceCreator(ServiceDef serviceDef, ObjectCreator delegate)
- {
- _serviceDef = serviceDef;
- _delegate = delegate;
- }
-
- /**
- * We could make this method synchronized, but in the context of creating
a service for a proxy,
- * it will already be synchronized (inside the proxy).
- */
- public Object createObject()
- {
- if (_locked)
- throw new
IllegalStateException(IOCMessages.recursiveServiceBuild(_serviceDef));
-
- _locked = true;
-
- return _delegate.createObject();
- }
-
-}
+package org.apache.tapestry.ioc.internal;
+
+import org.apache.tapestry.ioc.ObjectCreator;
+import org.apache.tapestry.ioc.def.ServiceDef;
+
+/**
+ * Decorator for [EMAIL PROTECTED] org.apache.tapestry.ioc.ObjectCreator} that
ensures the service is only
+ * created once. This detects a situation where the service builder for a
service directly or
+ * indirectly invokes methods on the service itself. This would show up as a
second call up the
+ * ServiceCreator stack injected into the proxy.
+ */
+public class OneShotServiceCreator implements ObjectCreator
+{
+ private final ServiceDef _serviceDef;
+
+ private final ObjectCreator _delegate;
+
+ private boolean _locked;
+
+ public OneShotServiceCreator(ServiceDef serviceDef, ObjectCreator delegate)
+ {
+ _serviceDef = serviceDef;
+ _delegate = delegate;
+ }
+
+ /**
+ * We could make this method synchronized, but in the context of creating
a service for a proxy,
+ * it will already be synchronized (inside the proxy).
+ */
+ public Object createObject()
+ {
+ if (_locked)
+ throw new
IllegalStateException(IOCMessages.recursiveServiceBuild(_serviceDef));
+
+ _locked = true;
+
+ return _delegate.createObject();
+ }
+
+}