You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2007/03/30 00:45:44 UTC
svn commit: r523862 [4/4] - in /tapestry/tapestry5:
quickstart/trunk/src/main/resources/archetype-resources/
tapestry-component-report/trunk/
tapestry-core/trunk/src/main/java/org/apache/tapestry/
tapestry-core/trunk/src/main/java/org/apache/tapestry/a...
Modified: tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java?view=diff&rev=523862&r1=523861&r2=523862
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java (original)
+++ tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/IntegrationTest.java Thu Mar 29 15:45:36 2007
@@ -330,56 +330,6 @@
}
@Test
- public void inject_service_annotation_with_symbol()
- {
- Registry r = buildRegistry(IndirectionModule.class);
-
- Indirection outer = r.getService("Outer", Indirection.class);
-
- assertEquals(outer.getName(), "OUTER[INNER]");
- }
-
- @Test
- public void inject_annotation_with_symbol()
- {
- Registry r = buildRegistry(IndirectionModule.class);
-
- Indirection outer = r.getService("Outer2", Indirection.class);
-
- assertEquals(outer.getName(), "OUTER2[INNER]");
- }
-
- @Test
- public void registry_get_service_with_symbol()
- {
- Registry r = buildRegistry(IndirectionModule.class);
-
- Indirection inner = r.getService("${indirection.inner}", Indirection.class);
-
- assertEquals(inner.getName(), "INNER");
- }
-
- @Test
- public void registry_get_object_with_symbol()
- {
- Registry r = buildRegistry(IndirectionModule.class);
-
- Indirection inner = r.getObject("${indirection.object-inner}", Indirection.class);
-
- assertEquals(inner.getName(), "INNER");
- }
-
- @Test
- public void inject_annotation_literal_value()
- {
- Registry r = buildRegistry(InjectLiteralModule.class);
-
- IntHolder holder = r.getService(IntHolder.class);
-
- assertEquals(holder.getValue(), 42);
- }
-
- @Test
public void access_to_services_ignores_case()
{
Registry r = buildRegistry(FredModule.class);
Added: tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/services/ValueObjectProviderTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/services/ValueObjectProviderTest.java?view=auto&rev=523862
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/services/ValueObjectProviderTest.java (added)
+++ tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/services/ValueObjectProviderTest.java Thu Mar 29 15:45:36 2007
@@ -0,0 +1,82 @@
+// 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.internal.services;
+
+import java.lang.annotation.Annotation;
+
+import org.apache.tapestry.ioc.AnnotationProvider;
+import org.apache.tapestry.ioc.ServiceLocator;
+import org.apache.tapestry.ioc.annotations.Value;
+import org.apache.tapestry.ioc.services.SymbolSource;
+import org.apache.tapestry.ioc.services.TypeCoercer;
+import org.apache.tapestry.ioc.test.IOCTestCase;
+import org.testng.annotations.Test;
+
+public class ValueObjectProviderTest extends IOCTestCase
+{
+ @Test
+ public void no_value_annotation()
+ {
+ SymbolSource symbolSource = newSymbolSource();
+ TypeCoercer coercer = newTypeCoercer();
+ AnnotationProvider annotationProvider = newAnnotationProvider();
+ ServiceLocator locator = newServiceLocator();
+
+ train_getAnnotation(annotationProvider, Value.class, null);
+
+ replay();
+
+ ValueObjectProvider provider = new ValueObjectProvider(symbolSource, coercer);
+
+ assertNull(provider.provide(Runnable.class, annotationProvider, locator));
+
+ verify();
+ }
+
+ @Test
+ public void value_annotation_present()
+ {
+ SymbolSource symbolSource = newSymbolSource();
+ TypeCoercer coercer = newTypeCoercer();
+ AnnotationProvider annotationProvider = newAnnotationProvider();
+ ServiceLocator locator = newServiceLocator();
+ String annotationValue = "${foo}";
+ String expanded = "Foo";
+ Runnable coerced = newRunnable();
+ Value annotation = newMock(Value.class);
+
+ train_getAnnotation(annotationProvider, Value.class, annotation);
+
+ expect(annotation.value()).andReturn(annotationValue);
+
+ train_expandSymbols(symbolSource, annotationValue, expanded);
+ train_coerce(coercer, expanded, Runnable.class, coerced);
+
+ replay();
+
+ ValueObjectProvider provider = new ValueObjectProvider(symbolSource, coercer);
+
+ assertSame(provider.provide(Runnable.class, annotationProvider, locator), coerced);
+
+ verify();
+ }
+
+ protected final <T extends Annotation> void train_getAnnotation(
+ AnnotationProvider annotationProvider, Class<T> annotationClass, T annotation)
+ {
+ expect(annotationProvider.getAnnotation(annotationClass)).andReturn(annotation)
+ .atLeastOnce();
+ }
+}
Modified: tapestry/tapestry5/tapestry-project/trunk/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-project/trunk/pom.xml?view=diff&rev=523862&r1=523861&r2=523862
==============================================================================
--- tapestry/tapestry5/tapestry-project/trunk/pom.xml (original)
+++ tapestry/tapestry5/tapestry-project/trunk/pom.xml Thu Mar 29 15:45:36 2007
@@ -215,8 +215,8 @@
</reporting>
<repositories>
<repository>
- <id>apache.snapshots</id>
- <url>http://people.apache.org/repo/m2-snapshot-repository/</url>
+ <id>tapestry-snapshots</id>
+ <url>http://people.apache.org/~hlship/tapestry-snapshot-repository/</url>
</repository>
<repository>
<id>codehaus.snapshots</id>
@@ -231,8 +231,8 @@
</repositories>
<pluginRepositories>
<pluginRepository>
- <id>apache.snapshots</id>
- <url> http://people.apache.org/repo/m2-snapshot-repository </url>
+ <id>tapestry-snapshots</id>
+ <url>http://people.apache.org/~hlship/tapestry-snapshot-repository</url>
</pluginRepository>
<!-- I believe a version of the surefire plugin lives here. -->
<pluginRepository>
@@ -266,15 +266,15 @@
<distributionManagement>
<site>
<id>tapestry</id>
- <url> scpexe://people.apache.org/www/tapestry.apache.org/tapestry5/ </url>
+ <url>scpexe://people.apache.org/www/tapestry.apache.org/tapestry5/ </url>
</site>
<repository>
<id>tapestry</id>
- <url> scpexe://people.apache.org/www/people.apache.org/repo/m2-ibiblio-rsync-repository </url>
+ <url>scpexe://people.apache.org/~hlship/public_html/tapestry-ibiblio-rsynch-repository</url>
</repository>
<snapshotRepository>
<id>tapestry</id>
- <url> scpexe://people.apache.org/www/people.apache.org/repo/m2-snapshot-repository </url>
+ <url>scpexe://people.apache.org/~hlship/public_html/tapestry-snapshot-repository</url>
</snapshotRepository>
</distributionManagement>
Modified: tapestry/tapestry5/tapestry-project/trunk/src/site/apt/index.apt
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-project/trunk/src/site/apt/index.apt?view=diff&rev=523862&r1=523861&r2=523862
==============================================================================
--- tapestry/tapestry5/tapestry-project/trunk/src/site/apt/index.apt (original)
+++ tapestry/tapestry5/tapestry-project/trunk/src/site/apt/index.apt Thu Mar 29 15:45:36 2007
@@ -94,8 +94,13 @@
New and Noteworthy
+ Another pass at simplifying and improving {{{tapestry-ioc/}tapestry-ioc}}, using ideas
+ from {{{http://code.google.com/p/google-guice/}Guice}}. The idea is to combine
+ @Inject with other annotations to supply overrding details (but @Inject on its own
+ is usually sufficient).
+
The {{{tapestry-ioc/}tapestry-ioc}} module has been simplified, removing the concept
- of module ids and namespaces, as well as private services.
+ of module ids and namespaces, as well as private services.
Work has been started on {{{http://hibernate.org}Hibernate}} integration in the
new {{{tapestry-hibernate/}tapestry-hibernate}} module.
Added: tapestry/tapestry5/tapestry-spring/trunk/src/main/java/org/apache/tapestry/spring/SpringBean.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-spring/trunk/src/main/java/org/apache/tapestry/spring/SpringBean.java?view=auto&rev=523862
==============================================================================
--- tapestry/tapestry5/tapestry-spring/trunk/src/main/java/org/apache/tapestry/spring/SpringBean.java (added)
+++ tapestry/tapestry5/tapestry-spring/trunk/src/main/java/org/apache/tapestry/spring/SpringBean.java Thu Mar 29 15:45:36 2007
@@ -0,0 +1,36 @@
+// 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.spring;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Indicates that the injection is for a Spring bean.
+ */
+@Target(
+{ FIELD, PARAMETER })
+@Documented
+@Retention(RUNTIME)
+public @interface SpringBean
+{
+ /** The name or id of the Spring bean to inject. */
+ String value();
+}
Modified: tapestry/tapestry5/tapestry-spring/trunk/src/main/java/org/apache/tapestry/spring/SpringModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-spring/trunk/src/main/java/org/apache/tapestry/spring/SpringModule.java?view=diff&rev=523862&r1=523861&r2=523862
==============================================================================
--- tapestry/tapestry5/tapestry-spring/trunk/src/main/java/org/apache/tapestry/spring/SpringModule.java (original)
+++ tapestry/tapestry5/tapestry-spring/trunk/src/main/java/org/apache/tapestry/spring/SpringModule.java Thu Mar 29 15:45:36 2007
@@ -17,6 +17,8 @@
import org.apache.commons.logging.Log;
import org.apache.tapestry.ioc.MappedConfiguration;
import org.apache.tapestry.ioc.ObjectProvider;
+import org.apache.tapestry.ioc.OrderedConfiguration;
+import org.apache.tapestry.ioc.annotations.EagerLoad;
import org.apache.tapestry.ioc.annotations.Inject;
import org.apache.tapestry.ioc.annotations.InjectService;
import org.apache.tapestry.services.Context;
@@ -41,7 +43,7 @@
* href="http://static.springframework.org/spring/docs/1.2.x/reference/beans.html#context-create">standard
* way</a> (which involves adding a listener to the web.xml deployment descriptor).
*/
- public static WebApplicationContext build(@Inject("alias:context")
+ public static WebApplicationContext build(@InjectService("Context")
Context context)
{
WebApplicationContext springContext = null;
@@ -62,15 +64,14 @@
}
/**
- * Contributes a "spring:" provider, that obtains beans from the
- * {@link #buildSpringObjectProvider(Log, Context) SpringObjectProvider service}.
+ * Contributes a provider named "Spring".
*/
public static void contributeMasterObjectProvider(@InjectService("SpringObjectProvider")
ObjectProvider springObjectProvider,
- MappedConfiguration<String, ObjectProvider> configuration)
+ OrderedConfiguration<ObjectProvider> configuration)
{
- configuration.add("spring", springObjectProvider);
+ configuration.add("Spring", springObjectProvider);
}
}
Modified: tapestry/tapestry5/tapestry-spring/trunk/src/main/java/org/apache/tapestry/spring/SpringObjectProvider.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-spring/trunk/src/main/java/org/apache/tapestry/spring/SpringObjectProvider.java?view=diff&rev=523862&r1=523861&r2=523862
==============================================================================
--- tapestry/tapestry5/tapestry-spring/trunk/src/main/java/org/apache/tapestry/spring/SpringObjectProvider.java (original)
+++ tapestry/tapestry5/tapestry-spring/trunk/src/main/java/org/apache/tapestry/spring/SpringObjectProvider.java Thu Mar 29 15:45:36 2007
@@ -19,6 +19,7 @@
import java.util.Map;
import org.apache.commons.logging.Log;
+import org.apache.tapestry.ioc.AnnotationProvider;
import org.apache.tapestry.ioc.ObjectProvider;
import org.apache.tapestry.ioc.ServiceLocator;
import org.springframework.web.context.WebApplicationContext;
@@ -31,45 +32,69 @@
*/
class SpringObjectProvider implements ObjectProvider
{
- private final WebApplicationContext _context;
+ private final Log _log;
- private final Map<String, String> _beanNames = newCaseInsensitiveMap();
+ private final WebApplicationContext _context;
- public SpringObjectProvider(Log log, WebApplicationContext context)
- {
- _context = context;
+ private boolean _beansNamesLoaded = false;
- // Build up a case-insensitive mapping of bean names.
+ private final Map<String, String> _beanNames = newCaseInsensitiveMap();
- for (String name : _context.getBeanDefinitionNames())
+ public SpringObjectProvider(Log log, WebApplicationContext context)
{
- _beanNames.put(name, name);
+ _log = log;
+
+ _context = context;
}
- log.info(SpringMessages.contextStartup(_beanNames.keySet()));
- }
+ private synchronized void loadBeanNames()
+ {
+ if (_beansNamesLoaded) return;
- /**
- * The expression is the name of a spring bean inside the context.
- */
- public <T> T provide(String expression, Class<T> objectType, ServiceLocator locator)
- {
- // Attempt to convert from the base insensitive name to the name as defined by Spring
- // (which is, to my knowledge) case sensitive.
- String effectiveName = _beanNames.containsKey(expression) ? _beanNames.get(expression)
- : expression;
+ for (String name : _context.getBeanDefinitionNames())
+ {
+ _beanNames.put(name, name);
+ }
- try
- {
- Object raw = _context.getBean(effectiveName, objectType);
+ _log.info(SpringMessages.contextStartup(_beanNames.keySet()));
- return objectType.cast(raw);
+ _beansNamesLoaded = true;
}
- catch (Exception ex)
+
+ /**
+ * The expression is the name of a spring bean inside the context.
+ */
+ public <T> T provide(Class<T> objectType, AnnotationProvider annotationProvider,
+ ServiceLocator locator)
{
- throw new RuntimeException(SpringMessages.beanAccessFailure(effectiveName, objectType, ex),
- ex);
+ SpringBean annotation = annotationProvider.getAnnotation(SpringBean.class);
+
+ if (annotation == null) return null;
+
+ String beanName = annotation.value();
+
+ // Need to defer loading bean names to avoid some bootstrapping problems.
+
+ loadBeanNames();
+
+ // Attempt to convert from the base insensitive name to the name as defined by Spring
+ // (which is, to my knowledge) case sensitive.
+ String effectiveName = _beanNames.containsKey(beanName) ? _beanNames.get(beanName)
+ : beanName;
+
+ try
+ {
+ Object raw = _context.getBean(effectiveName, objectType);
+
+ return objectType.cast(raw);
+ }
+ catch (Exception ex)
+ {
+ throw new RuntimeException(SpringMessages.beanAccessFailure(
+ effectiveName,
+ objectType,
+ ex), ex);
+ }
}
- }
}
Modified: tapestry/tapestry5/tapestry-spring/trunk/src/site/apt/index.apt
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-spring/trunk/src/site/apt/index.apt?view=diff&rev=523862&r1=523861&r2=523862
==============================================================================
--- tapestry/tapestry5/tapestry-spring/trunk/src/site/apt/index.apt (original)
+++ tapestry/tapestry5/tapestry-spring/trunk/src/site/apt/index.apt Thu Mar 29 15:45:36 2007
@@ -55,13 +55,16 @@
* Injecting beans
Inside your component classes, you may use the
- {{{http://tapestry.apache.org/tapestry5/tapestry-core/apidocs/org/apache/tapestry/annotations/Inject.html}Inject}} annotation. The annotation
- value should be "spring:" + the name of the bean. Example:
+ {{{http://tapestry.apache.org/tapestry5/tapestry-core/apidocs/org/apache/tapestry/annotations/Inject.html}Inject}} annotation in combination with
+ the {{{apidocs/org/apache/tapestry/spring/SpringBean.html}SpringBean}} annotation (to define the name of the bean).
+----+
- @Inject("spring:userDAO")
+ @Inject
+ @SpringBean("userDAO")
private UserDAO _userDAO;
+----+
+
+ This also works with parameters to service builder methods.
Case Insensitivity
Copied: tapestry/tapestry5/tapestry-spring/trunk/src/test/java/org/apache/tapestry/spring/SampleBean.java (from r515167, tapestry/tapestry5/tapestry-spring/trunk/src/test/java/org/apache/tapestry/spring/SpringBean.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-spring/trunk/src/test/java/org/apache/tapestry/spring/SampleBean.java?view=diff&rev=523862&p1=tapestry/tapestry5/tapestry-spring/trunk/src/test/java/org/apache/tapestry/spring/SpringBean.java&r1=515167&p2=tapestry/tapestry5/tapestry-spring/trunk/src/test/java/org/apache/tapestry/spring/SampleBean.java&r2=523862
==============================================================================
--- tapestry/tapestry5/tapestry-spring/trunk/src/test/java/org/apache/tapestry/spring/SpringBean.java (original)
+++ tapestry/tapestry5/tapestry-spring/trunk/src/test/java/org/apache/tapestry/spring/SampleBean.java Thu Mar 29 15:45:36 2007
@@ -14,7 +14,7 @@
package org.apache.tapestry.spring;
-public interface SpringBean
+public interface SampleBean
{
}
Modified: tapestry/tapestry5/tapestry-spring/trunk/src/test/java/org/apache/tapestry/spring/SpringObjectProviderTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-spring/trunk/src/test/java/org/apache/tapestry/spring/SpringObjectProviderTest.java?view=diff&rev=523862&r1=523861&r2=523862
==============================================================================
--- tapestry/tapestry5/tapestry-spring/trunk/src/test/java/org/apache/tapestry/spring/SpringObjectProviderTest.java (original)
+++ tapestry/tapestry5/tapestry-spring/trunk/src/test/java/org/apache/tapestry/spring/SpringObjectProviderTest.java Thu Mar 29 15:45:36 2007
@@ -15,6 +15,7 @@
package org.apache.tapestry.spring;
import org.apache.commons.logging.Log;
+import org.apache.tapestry.ioc.AnnotationProvider;
import org.apache.tapestry.ioc.ObjectProvider;
import org.apache.tapestry.ioc.ServiceLocator;
import org.apache.tapestry.test.TapestryTestCase;
@@ -23,121 +24,149 @@
public class SpringObjectProviderTest extends TapestryTestCase
{
- private static final String STARTUP_MESSAGE = "Using Spring WebApplicationContext containing beans: ";
+ private static final String STARTUP_MESSAGE = "Using Spring WebApplicationContext containing beans: ";
- private static final String BEAN_NAME = "mySpringBean";
+ private static final String BEAN_NAME = "mySpringBean";
- @Test
- public void failure_getting_bean_from_context()
- {
- Log log = newLog();
- WebApplicationContext webContext = newWebApplicationContext();
- ServiceLocator locator = newServiceLocator();
- Throwable t = new RuntimeException("Simulated failure.");
-
- train_getBeanDefinitionNames(webContext, BEAN_NAME);
-
- log.info(STARTUP_MESSAGE + BEAN_NAME);
+ @Test
+ public void failure_getting_bean_from_context()
+ {
+ Log log = newLog();
+ WebApplicationContext webContext = newWebApplicationContext();
+ ServiceLocator locator = newServiceLocator();
+ Throwable t = new RuntimeException("Simulated failure.");
+ AnnotationProvider annotationProvider = newAnnotationProvider();
+ SpringBean annotation = newSpringBean(BEAN_NAME);
+
+ train_getBeanDefinitionNames(webContext, BEAN_NAME);
+
+ log.info(STARTUP_MESSAGE + BEAN_NAME);
+
+ train_getAnnotation(annotationProvider, SpringBean.class, annotation);
+
+ expect(webContext.getBean(BEAN_NAME, SampleBean.class)).andThrow(t);
+
+ replay();
+
+ ObjectProvider provider = new SpringObjectProvider(log, webContext);
+
+ try
+ {
+ provider.provide(SampleBean.class, annotationProvider, locator);
+ unreachable();
+ }
+ catch (RuntimeException ex)
+ {
+ assertEquals(
+ ex.getMessage(),
+ "A failure occured obtaining Spring bean \'mySpringBean\' (of type org.apache.tapestry.spring.SampleBean): Simulated failure.");
+ assertSame(ex.getCause(), t);
+ }
- expect(webContext.getBean(BEAN_NAME, SpringBean.class)).andThrow(t);
+ verify();
+ }
- replay();
+ private SpringBean newSpringBean(String name)
+ {
+ SpringBean bean = newMock(SpringBean.class);
- ObjectProvider provider = new SpringObjectProvider(log, webContext);
+ expect(bean.value()).andReturn(name).atLeastOnce();
- try
- {
- provider.provide(BEAN_NAME, SpringBean.class, locator);
- unreachable();
+ return bean;
}
- catch (RuntimeException ex)
+
+ @Test
+ public void get_bean_from_context()
{
- assertEquals(
- ex.getMessage(),
- "A failure occured obtaining Spring bean \'mySpringBean\' (of type org.apache.tapestry.spring.SpringBean): Simulated failure.");
- assertSame(ex.getCause(), t);
- }
+ Log log = newLog();
+ WebApplicationContext webContext = newWebApplicationContext();
+ ServiceLocator locator = newServiceLocator();
+ AnnotationProvider annotationProvider = newAnnotationProvider();
+ SpringBean annotation = newSpringBean(BEAN_NAME);
+
+ SampleBean bean = newMock(SampleBean.class);
+
+ train_getBeanDefinitionNames(webContext, "fred", "barney", BEAN_NAME);
- verify();
- }
+ log.info(STARTUP_MESSAGE + "barney, fred, " + BEAN_NAME);
- @Test
- public void get_bean_from_context()
- {
- Log log = newLog();
- WebApplicationContext webContext = newWebApplicationContext();
- ServiceLocator locator = newServiceLocator();
- SpringBean bean = newMock(SpringBean.class);
+ train_getAnnotation(annotationProvider, SpringBean.class, annotation);
- train_getBeanDefinitionNames(webContext, "fred", "barney", BEAN_NAME);
+ expect(webContext.getBean(BEAN_NAME, SampleBean.class)).andReturn(bean);
- log.info(STARTUP_MESSAGE + "barney, fred, " + BEAN_NAME);
+ replay();
- expect(webContext.getBean(BEAN_NAME, SpringBean.class)).andReturn(bean);
+ ObjectProvider provider = new SpringObjectProvider(log, webContext);
- replay();
+ assertSame(provider.provide(SampleBean.class, annotationProvider, locator), bean);
- ObjectProvider provider = new SpringObjectProvider(log, webContext);
+ verify();
+ }
- assertSame(provider.provide(BEAN_NAME, SpringBean.class, locator), bean);
+ @Test
+ public void bean_name_is_case_insensitive_if_in_bean_definitions()
+ {
+ Log log = newLog();
+ WebApplicationContext webContext = newWebApplicationContext();
+ ServiceLocator locator = newServiceLocator();
+ SampleBean bean = newMock(SampleBean.class);
+ AnnotationProvider annotationProvider = newAnnotationProvider();
+ SpringBean annotation = newSpringBean(BEAN_NAME.toUpperCase());
- verify();
- }
+ train_getBeanDefinitionNames(webContext, "fred", "barney", BEAN_NAME);
- @Test
- public void bean_name_is_case_insensitive_if_in_bean_definitions()
- {
- Log log = newLog();
- WebApplicationContext webContext = newWebApplicationContext();
- ServiceLocator locator = newServiceLocator();
- SpringBean bean = newMock(SpringBean.class);
+ log.info(STARTUP_MESSAGE + "barney, fred, " + BEAN_NAME);
- train_getBeanDefinitionNames(webContext, "fred", "barney", BEAN_NAME);
+ train_getAnnotation(annotationProvider, SpringBean.class, annotation);
- log.info(STARTUP_MESSAGE + "barney, fred, " + BEAN_NAME);
+ expect(webContext.getBean(BEAN_NAME, SampleBean.class)).andReturn(bean);
- expect(webContext.getBean(BEAN_NAME, SpringBean.class)).andReturn(bean);
+ replay();
- replay();
+ ObjectProvider provider = new SpringObjectProvider(log, webContext);
- ObjectProvider provider = new SpringObjectProvider(log, webContext);
+ assertSame(provider.provide(SampleBean.class, annotationProvider, locator), bean);
- assertSame(provider.provide(BEAN_NAME.toUpperCase(), SpringBean.class, locator), bean);
+ verify();
+ }
+
+ @Test
+ public void bean_name_outside_of_bean_definitions_supported_with_provided_case()
+ {
+ Log log = newLog();
+ WebApplicationContext webContext = newWebApplicationContext();
+ ServiceLocator locator = newServiceLocator();
+ AnnotationProvider annotationProvider = newAnnotationProvider();
+ SpringBean annotation = newSpringBean(BEAN_NAME);
- verify();
- }
+ SampleBean bean = newMock(SampleBean.class);
- @Test
- public void bean_name_outside_of_bean_definitions_supported_with_provided_case()
- {
- Log log = newLog();
- WebApplicationContext webContext = newWebApplicationContext();
- ServiceLocator locator = newServiceLocator();
- SpringBean bean = newMock(SpringBean.class);
+ train_getBeanDefinitionNames(webContext, "fred", "barney");
- train_getBeanDefinitionNames(webContext, "fred", "barney");
+ log.info(STARTUP_MESSAGE + "barney, fred");
- log.info(STARTUP_MESSAGE + "barney, fred");
+ train_getAnnotation(annotationProvider, SpringBean.class, annotation);
- expect(webContext.getBean(BEAN_NAME, SpringBean.class)).andReturn(bean);
+ expect(webContext.getBean(BEAN_NAME, SampleBean.class)).andReturn(bean);
- replay();
+ replay();
- ObjectProvider provider = new SpringObjectProvider(log, webContext);
+ ObjectProvider provider = new SpringObjectProvider(log, webContext);
- assertSame(provider.provide(BEAN_NAME, SpringBean.class, locator), bean);
+ assertSame(provider.provide(SampleBean.class, annotationProvider, locator), bean);
- verify();
- }
+ verify();
+ }
- protected final void train_getBeanDefinitionNames(WebApplicationContext context, String... names)
- {
- expect(context.getBeanDefinitionNames()).andReturn(names);
- }
+ protected final void train_getBeanDefinitionNames(WebApplicationContext context,
+ String... names)
+ {
+ expect(context.getBeanDefinitionNames()).andReturn(names);
+ }
- protected final WebApplicationContext newWebApplicationContext()
- {
- return newMock(WebApplicationContext.class);
- }
+ protected final WebApplicationContext newWebApplicationContext()
+ {
+ return newMock(WebApplicationContext.class);
+ }
}
Modified: tapestry/tapestry5/tapestry-spring/trunk/src/test/java/org/example/testapp/pages/Start.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-spring/trunk/src/test/java/org/example/testapp/pages/Start.java?view=diff&rev=523862&r1=523861&r2=523862
==============================================================================
--- tapestry/tapestry5/tapestry-spring/trunk/src/test/java/org/example/testapp/pages/Start.java (original)
+++ tapestry/tapestry5/tapestry-spring/trunk/src/test/java/org/example/testapp/pages/Start.java Thu Mar 29 15:45:36 2007
@@ -16,30 +16,32 @@
import org.apache.tapestry.annotations.Inject;
import org.apache.tapestry.annotations.Retain;
+import org.apache.tapestry.spring.SpringBean;
import org.example.testapp.services.Upcase;
public class Start
{
- @Retain
- private String _input;
+ @Retain
+ private String _input;
- // Demonstrating case insensitivity
- @Inject("Spring:Upcase")
- private Upcase _upcaseBean;
+ // Demonstrating case insensitivity
+ @Inject
+ @SpringBean("Upcase")
+ private Upcase _upcaseBean;
- void onSuccess()
- {
- _input = _upcaseBean.toUpperCase(_input);
- }
+ void onSuccess()
+ {
+ _input = _upcaseBean.toUpperCase(_input);
+ }
- public String getInput()
- {
- return _input;
- }
+ public String getInput()
+ {
+ return _input;
+ }
- public void setInput(String input)
- {
- _input = input;
- }
+ public void setInput(String input)
+ {
+ _input = input;
+ }
}