Daniel Fagerstrom wrote:
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:

Hint: ServiceManager is injected, or it should be.


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

    this.wdbs.get("form");

Hint: this operation is "map lookup". So you have replaced one lookup from injected object with another lookup on another injected object. Net result: no change. :-P


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>

This is *exactly* what we have now: nested declaration. And this is *exactly* what causes the problem: there is no way to easily extend standard configuration.

There should be a way to add declarations of new forms component as stand alone spring beans, and forms should be able to pick them up. I figure we just should re-use existing machinery used in the sitemap. It certainly beats introduction of Yet Another Way To Lookup Components.

In short, I'm fine with any mechanism, as long as it is used consistently throughout Cocoon.

Vadim

Reply via email to