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


Reply via email to