Vadim Gritsenko skrev:
Giacomo Pati wrote:
CFroms is utilizing lots of Avalon ServiceSelector and this hinders extensibility of it as adding new Widget types etc. is becomming a pain with config files in jars.

I've thought about a Spring version of a ServiceSelector to allow a more flexible configuration and extensibility with a class like

class SpringServiceSelector implements BeanFactoryAware, ServiceSelector

Eww :) Why do you need SpringServiceSelector? IMHO forms should be just modified to obtain necessary dependencies directly from manager:

  manager.lookup("o.a.c.f.f.WidgetDefinitionBuilder/form")

Eww ;) Why do you need lookup? IMHO we should use dependency injection:

  void setWidgetDefinitionBuilders(Map wdbs) { this.wdbs=wdbs; }
...

    this.wdbs.get("form");

And the map is provided by a factory bean that looks up all beans that implements an interface and get the selector role from a property:

  <property name="widgetDefinitionBuilders">
    <bean class="o.a.c...BeansByIntefaceFactoryBean">
      <property name="inteface"
                value="o.a.c.f.f.WidgetDefinitionBuilder"/>
      <property name="roleAttribute" value="role"/>
    </bean>
  </property>

And if we find this to painful to write, it is possible to create a custom XML extension:

  <property name="widgetDefinitionBuilders"
            selector:inteface="o.a.c.f.f.WidgetDefinitionBuilder"/>

And get away completely from any service selectors. This is similar to what is done for flattening of sitemap components, isn't it?

Yes.

...

IIRC the SpringServiceSelector could lookup other beans by interfaces, right?

Yes, see http://svn.apache.org/repos/asf/cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/DispatcherServlet.java, for an example where I lookup all servlets having a mountPath property in the init method.

Anybody else think this is achievable and make sense?

Absolutely!

/Daniel

Reply via email to