You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2007/03/10 06:44:12 UTC

svn commit: r516655 - in /tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src: main/java/org/apache/tapestry/ioc/internal/ main/resources/org/apache/tapestry/ioc/internal/ test/java/org/apache/tapestry/ioc/

Author: hlship
Date: Fri Mar  9 21:44:11 2007
New Revision: 516655

URL: http://svn.apache.org/viewvc?view=rev&rev=516655
Log:
TAPESTRY-1339: Add a check for duplicate service ids when constructing the RegistryImpl.

Added:
    tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/test/java/org/apache/tapestry/ioc/DuplicateFredModule.java
Modified:
    tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/IOCMessages.java
    tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/Module.java
    tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/ModuleImpl.java
    tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/RegistryImpl.java
    tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/resources/org/apache/tapestry/ioc/internal/IOCStrings.properties
    tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java

Modified: tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/IOCMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/IOCMessages.java?view=diff&rev=516655&r1=516654&r2=516655
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/IOCMessages.java (original)
+++ tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/IOCMessages.java Fri Mar  9 21:44:11 2007
@@ -30,14 +30,10 @@
 import org.apache.tapestry.ioc.internal.util.InternalUtils;
 import org.apache.tapestry.ioc.internal.util.MessagesImpl;
 
-public final class IOCMessages
+final class IOCMessages
 {
     private static final Messages MESSAGES = MessagesImpl.forClass(IOCMessages.class);
 
-    private IOCMessages()
-    {
-    }
-
     static String buildMethodConflict(Method conflict, String existing)
     {
         return MESSAGES.format("build-method-conflict", asString(conflict), existing);
@@ -90,7 +86,6 @@
         return MESSAGES.format("builder-method-returned-null", asString(method), serviceId);
     }
 
-
     static String noServiceMatchesType(Class serviceInterface)
     {
         return MESSAGES.format("no-service-matches-type", serviceInterface.getName());
@@ -273,5 +268,10 @@
     static String noSuchService(String serviceId, Collection<String> serviceIds)
     {
         return MESSAGES.format("no-such-service", serviceId, InternalUtils.joinSorted(serviceIds));
+    }
+
+    static String serviceIdConflict(String serviceId, ServiceDef existing, ServiceDef conflicting)
+    {
+        return MESSAGES.format("service-id-conflict", serviceId, existing, conflicting);
     }
 }

Modified: tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/Module.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/Module.java?view=diff&rev=516655&r1=516654&r2=516655
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/Module.java (original)
+++ tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/Module.java Fri Mar  9 21:44:11 2007
@@ -85,4 +85,13 @@
      * and forces them to instantiate fully. This is part of the Registry startup.
      */
     void eagerLoadServices();
+
+    /**
+     * Returns the service definition for the given service id.
+     * 
+     * @param serviceId
+     *            unique id for the service (caseless)
+     * @return the service definition or null
+     */
+    ServiceDef getServiceDef(String serviceId);
 }

Modified: tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/ModuleImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/ModuleImpl.java?view=diff&rev=516655&r1=516654&r2=516655
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/ModuleImpl.java (original)
+++ tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/ModuleImpl.java Fri Mar  9 21:44:11 2007
@@ -444,4 +444,9 @@
         return result;
     }
 
+    public ServiceDef getServiceDef(String serviceId)
+    {
+        return _moduleDef.getServiceDef(serviceId);
+    }
+
 }

Modified: tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/RegistryImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/RegistryImpl.java?view=diff&rev=516655&r1=516654&r2=516655
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/RegistryImpl.java (original)
+++ tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/java/org/apache/tapestry/ioc/internal/RegistryImpl.java Fri Mar  9 21:44:11 2007
@@ -153,7 +153,11 @@
 
             for (String serviceId : def.getServiceIds())
             {
-                // TODO: Check for collision
+                Module existing = _serviceIdToModule.get(serviceId);
+
+                if (existing != null)
+                    throw new RuntimeException(IOCMessages.serviceIdConflict(serviceId, existing
+                            .getServiceDef(serviceId), module.getServiceDef(serviceId)));
 
                 _serviceIdToModule.put(serviceId, module);
             }

Modified: tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/resources/org/apache/tapestry/ioc/internal/IOCStrings.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/resources/org/apache/tapestry/ioc/internal/IOCStrings.properties?view=diff&rev=516655&r1=516654&r2=516655
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/resources/org/apache/tapestry/ioc/internal/IOCStrings.properties (original)
+++ tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/main/resources/org/apache/tapestry/ioc/internal/IOCStrings.properties Fri Mar  9 21:44:11 2007
@@ -72,4 +72,6 @@
 registry-shutdown=Proxy for service %s is no longer active because the IOC Registry has been shut down.
 constructed-configuration=Constructed configuration: %s
 service-construction-failed=Construction of service %s failed: %s
-no-such-service=Service id '%s' is not defined by any module.  Defined services: %s.
\ No newline at end of file
+no-such-service=Service id '%s' is not defined by any module.  Defined services: %s.
+service-id-conflict=Service id '%s' has already been defined by %s and may not be redefined by %s. \
+ You should rename one of the service builder methods.
\ No newline at end of file

Added: tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/test/java/org/apache/tapestry/ioc/DuplicateFredModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/test/java/org/apache/tapestry/ioc/DuplicateFredModule.java?view=auto&rev=516655
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/test/java/org/apache/tapestry/ioc/DuplicateFredModule.java (added)
+++ tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/test/java/org/apache/tapestry/ioc/DuplicateFredModule.java Fri Mar  9 21:44:11 2007
@@ -0,0 +1,23 @@
+// Copyright 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.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.ioc;
+
+public class DuplicateFredModule
+{
+    public Runnable buildFred()
+    {
+        return null;
+    }
+}

Modified: tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java?view=diff&rev=516655&r1=516654&r2=516655
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java (original)
+++ tapestry/tapestry5/tapestry-ioc/branches/hlship-20070309-simplifyioc/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java Fri Mar  9 21:44:11 2007
@@ -36,6 +36,23 @@
     }
 
     @Test
+    public void duplicate_service_names_are_failure()
+    {
+        try
+        {
+            buildRegistry(FredModule.class, DuplicateFredModule.class);
+            unreachable();
+        }
+        catch (RuntimeException ex)
+        {
+            assertTrue(ex.getMessage().startsWith("Service id 'Fred' has already been defined by"));
+
+            // Can't check the entire message, because we can't guarantee what order the modules
+            // will be processed in.
+        }
+    }
+
+    @Test
     public void static_builder_method_does_not_instantiate_builder()
     {
         StaticModule.setInstantiated(false);