Author: hlship
Date: Thu May 31 08:36:04 2007
New Revision: 543165
URL: http://svn.apache.org/viewvc?view=rev&rev=543165
Log:
TAPESTRY-1497: EagerLoad is too early for a normal Tapestry application
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/TapestryFilter.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/IOCUtilities.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/Registry.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/RegistryBuilder.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/IOCInternalTestCase.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/RegistryImpl.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/RegistryWrapper.java
tapestry/tapestry5/trunk/tapestry-ioc/src/site/apt/run.apt
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/TapestryFilter.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/TapestryFilter.java?view=diff&rev=543165&r1=543164&r2=543165
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/TapestryFilter.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/TapestryFilter.java
Thu May 31 08:36:04 2007
@@ -58,7 +58,6 @@
* defined by the <code>tapestry.app-package</code> context init parameter
and the application
* name is the capitalization of the filter name (as specified in web.xml).
*/
-
public final void init(FilterConfig filterConfig) throws ServletException
{
_config = filterConfig;
@@ -85,6 +84,8 @@
ServletApplicationInitializer.class);
ai.initializeApplication(filterConfig.getServletContext());
+
+ _registry.eagerLoadServices();
_handler = _registry.getService(
"HttpServletRequestHandler",
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java?view=diff&rev=543165&r1=543164&r2=543165
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java
Thu May 31 08:36:04 2007
@@ -113,6 +113,8 @@
_registry = builder.build();
// _registry.getService(Alias.class).setMode("servlet");
+
+ _registry.eagerLoadServices();
}
@AfterSuite
@@ -127,6 +129,11 @@
public final void cleanupThread()
{
_registry.cleanupThread();
+ }
+
+ public void eagerLoadServices()
+ {
+ _registry.eagerLoadServices();
}
public final <T> T getObject(Class<T> objectType, AnnotationProvider
annotationProvider)
Modified:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/IOCUtilities.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/IOCUtilities.java?view=diff&rev=543165&r1=543164&r2=543165
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/IOCUtilities.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/IOCUtilities.java
Thu May 31 08:36:04 2007
@@ -37,7 +37,7 @@
* Construct a default registry, including modules identify via the
Tapestry-Module-Classes
* Manifest entry.
*
- * @return constructed Registry
+ * @return constructed Registry, after eager loading of services
*/
public static Registry buildDefaultRegistry()
{
@@ -45,7 +45,11 @@
addDefaultModules(builder);
- return builder.build();
+ Registry registry = builder.build();
+
+ registry.eagerLoadServices();
+
+ return registry;
}
/**
Modified:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/Registry.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/Registry.java?view=diff&rev=543165&r1=543164&r2=543165
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/Registry.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/Registry.java
Thu May 31 08:36:04 2007
@@ -14,6 +14,8 @@
package org.apache.tapestry.ioc;
+import org.apache.tapestry.ioc.annotations.EagerLoad;
+
/**
* Public access to the IoC service registry.
*/
@@ -37,4 +39,9 @@
* @see org.apache.tapestry.ioc.services.RegistryShutdownListener
*/
void shutdown();
+
+ /**
+ * Invoked to eagerly load services marked with the [EMAIL PROTECTED]
EagerLoad} annotation.
+ */
+ void eagerLoadServices();
}
Modified:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/RegistryBuilder.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/RegistryBuilder.java?view=diff&rev=543165&r1=543164&r2=543165
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/RegistryBuilder.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/RegistryBuilder.java
Thu May 31 08:36:04 2007
@@ -130,8 +130,6 @@
RegistryImpl registry = new RegistryImpl(_modules, _classFactory,
_logSource);
- registry.eagerLoadServices();
-
return new RegistryWrapper(registry);
}
Modified:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/IOCInternalTestCase.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/IOCInternalTestCase.java?view=diff&rev=543165&r1=543164&r2=543165
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/IOCInternalTestCase.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/IOCInternalTestCase.java
Thu May 31 08:36:04 2007
@@ -68,12 +68,19 @@
return _registry.autobuild(clazz);
}
+ public final void eagerLoadServices()
+ {
+ _registry.eagerLoadServices();
+ }
+
@BeforeSuite
public final void setup_registry()
{
RegistryBuilder builder = new RegistryBuilder();
_registry = builder.build();
+
+ _registry.eagerLoadServices();
_classFactory = _registry.getService(ClassFactory.class);
}
Modified:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/RegistryImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/RegistryImpl.java?view=diff&rev=543165&r1=543164&r2=543165
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/RegistryImpl.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/RegistryImpl.java
Thu May 31 08:36:04 2007
@@ -76,6 +76,8 @@
private final OneShotLock _lock = new OneShotLock();
+ private final OneShotLock _eagerLoadLock = new OneShotLock();
+
private final Map<String, Object> _builtinServices =
newCaseInsensitiveMap();
private final Map<String, Class> _builtinTypes = newCaseInsensitiveMap();
@@ -180,8 +182,12 @@
*/
public void eagerLoadServices()
{
+ _eagerLoadLock.lock();
+
for (Module m : _modules)
m.eagerLoadServices();
+
+ cleanupThread();
}
public Log logForService(String serviceId)
Modified:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/RegistryWrapper.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/RegistryWrapper.java?view=diff&rev=543165&r1=543164&r2=543165
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/RegistryWrapper.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/internal/RegistryWrapper.java
Thu May 31 08:36:04 2007
@@ -63,4 +63,9 @@
return _registry.autobuild(clazz);
}
+ public void eagerLoadServices()
+ {
+ _registry.eagerLoadServices();
+ }
+
}
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/site/apt/run.apt
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/site/apt/run.apt?view=diff&rev=543165&r1=543164&r2=543165
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/site/apt/run.apt (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/site/apt/run.apt Thu May 31
08:36:04 2007
@@ -25,6 +25,8 @@
builder.add(AppModule.class, UtilModule.class);
Registry registry = builder.build();
+
+registry.eagerLoadServices();
+---+
You may invoke add() as many times as you wish, or pass as many module
classes
@@ -34,6 +36,10 @@
the builtin services from the
{{{apidocs/org/apache/tapestry/ioc/services/TapestryIoCModule.html}Tapestry
IoC module}}, plus
the modules you explicitly list.
+
+ The call to eagerLoadServices() is necessary to ensure that any services
marked with the
+ {{{apidocs/org/apache/tapestry/ioc/annotations/EagerLoad.html}EagerLoad}}
annotation are, in fact,
+ loaded.
Building the Default Registry
Modified:
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java?view=diff&rev=543165&r1=543164&r2=543165
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java
Thu May 31 08:36:04 2007
@@ -319,18 +319,15 @@
@Test
public void eager_service_loading()
{
+ Registry r = buildRegistry(EagerLoadModule.class);
+
assertFalse(
EagerLoadModule._eagerLoadDidHappen,
"EagerLoadModule is not in correct initial state.");
- Registry r = buildRegistry(EagerLoadModule.class);
-
- // Prevents warning: r is never read
- assertNotNull(r);
+ r.eagerLoadServices();
assertTrue(EagerLoadModule._eagerLoadDidHappen);
-
- r = null;
}
@Test