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