Hi all!

I use a spring alias which causes me some headache, because I get

Caused by: org.apache.tapestry5.ioc.internal.OperationException: Spring context contains 2 beans assignable to type mypackage.IService: myPackage.IServiceAlias, mypackage.IService. at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:90) at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:68) at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:941) at org.apache.tapestry5.internal.spring.SpringModuleDef$4$2.provide(SpringModuleDef.java:268) at org.apache.tapestry5.internal.spring.SpringModuleDef$4$3.provide(SpringModuleDef.java:290) at org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl$1.invoke(MasterObjectProviderImpl.java:48) at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:68) at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:68) at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:941) at org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl.provide(MasterObjectProviderImpl.java:41) at $MasterObjectProvider_1285a834ec0.provide($MasterObjectProvider_1285a834ec0.java)


When looking at the T5 code I see the following:


    public void contribute(final ModuleBuilderSource moduleSource,
                           final ServiceResources resources,
                           final OrderedConfiguration configuration)
    {
        final OperationTracker tracker = resources.getTracker();

final ApplicationContext context = resources.getService("ApplicationContext", ApplicationContext.class);

        final ObjectProvider springBeanProvider = new ObjectProvider()
        {
public <T> T provide(Class<T> objectType, AnnotationProvider annotationProvider,
                                 ObjectLocator locator)
            {

                Map beanMap = context.getBeansOfType(objectType);

                switch (beanMap.size()) {
                    case 0:
                        return null;

                    case 1:

                        Object bean = beanMap.values().iterator().next();

                        return objectType.cast(bean);

                    default:

                        String message = String.format(
"Spring context contains %d beans assignable to type %s: %s.",
                            beanMap.size(),
                            ClassFabUtils.toJavaClassName(objectType),
                            InternalUtils.joinSorted(beanMap.keySet()));

                        throw new IllegalArgumentException(message);
                }
            }
        };
    }



and "default" causes my application to RIP

The question to me is now:
a) does T5 help me? can I force the usage of an implementation?
b) can I provide my own spring object provider implementation? if yes, my strategy would be to look at all entries in the map and to make sure they are the same object (identity) or at least of same class. In that case it must be save to return the first entry from the list and continue, right?

Thanks in advance

Jens



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to