Documentation[1] updated as well. Please let me know if something is not clear! Thanks, -Simo
[1] http://onami.incubator.apache.org/spi/services.html http://people.apache.org/~simonetripodi/ http://simonetripodi.livejournal.com/ http://twitter.com/simonetripodi http://www.99soft.org/ On Tue, Jan 15, 2013 at 9:07 PM, Simone Tripodi <[email protected]> wrote: > Hi guys, > > no objections have been shown, I am going to checkin the proposed > modifications. > > Thanks a lot for participating in the discussion! > -Simo > > http://people.apache.org/~simonetripodi/ > http://simonetripodi.livejournal.com/ > http://twitter.com/simonetripodi > http://www.99soft.org/ > > > On Sun, Jan 13, 2013 at 5:08 PM, Simone Tripodi > <[email protected]> wrote: >> Hi all again, >> >> I maybe found the solution to that issue and proposed a patch on ONAMI-51. >> Please review, if there are no objections I intend to commit it. >> >> I would like also to bump to a major release and break the binary >> compatibility, since the previous version is quiet useless :) >> >> Many thanks in advance, all the best! >> -Simo >> >> http://people.apache.org/~simonetripodi/ >> http://simonetripodi.livejournal.com/ >> http://twitter.com/simonetripodi >> http://www.99soft.org/ >> >> >> On Thu, Jan 10, 2013 at 9:51 PM, Simone Tripodi >> <[email protected]> wrote: >>> Hi all guys, >>> >>> I think the main idea of services binding[1] in SPI is good but still >>> a little far to be complete, because what they miss are *qualifiers*, >>> I mean, Guice allows binding the same interface/service to multiple >>> instances by qualifying them via annotations, i.e. >>> >>> bind(CreditCardProcessor.class).annotatedWith(Names.named("Visa")).to(VisaCreditCardProcessor.class); >>> bind(CreditCardProcessor.class).annotatedWith(Names.named("Mastercard")).to(MastercardCreditCardProcessor.class); >>> >>> So users can require service injection depending on bound metadata, >>> rather than requiring and explicit class implementation: >>> >>> @Inject >>> @Named("Visa") >>> CreditCardProcessor creditCardProcessor; >>> >>> Now, coming back to the current SPI implementation, it just allows >>> doing silly bindings, such as bind the service to the first discovered >>> implementation or getting all the discovered implementations, mainly >>> because META-INF/services files just enlist service implementation, >>> i.e. >>> >>> file META-INF/services/org.acme.CreditCardProcessor >>> ----------------------------------------------------------------- >>> org.acme.VisaCreditCardProcessor >>> org.acme.MastercardCreditCardProcessor >>> >>> There are not qualifiers :( While at the time of coding the first >>> version of SPI it made me happy, now I am not longer satisfied. >>> >>> We can do something better, my proposal is: >>> >>> * allows specifying a set of metadata - please remind that qualifiers, >>> binding annotations, can be more complex rather than just @Named - in >>> META-INF/services files for each service, something like >>> >>> file META-INF/services/org.acme.CreditCardProcessor >>> ----------------------------------------------------------------- >>> org.acme.VisaCreditCardProcessor; type=Visa; version=1.0.0; >>> org.acme.MastercardCreditCardProcessor; type=Mastercard; version=1.5.0; >>> >>> * defining a new binding annotation, something like: >>> >>> @Documented >>> @Retention( RetentionPolicy.RUNTIME ) >>> public @interface Property >>> { >>> >>> String name(); >>> >>> String value(); >>> >>> @Documented >>> @BindingAnnotation >>> @Retention( RetentionPolicy.RUNTIME ) >>> @Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD >>> }) >>> @interface List >>> { >>> Property[] value(); >>> } >>> >>> } >>> >>> in order users can request injections specifying injections like: >>> >>> @Inject >>> @Property.List({ >>> @Property( name="type", value="Visa" ), >>> @Property( name="version", value="1.0.0" ) >>> }) >>> CreditCardProcessor creditCardProcessor; >>> >>> WDYT? Do you have any idea? >>> Many thanks in advance! >>> -Simo >>> >>> [1] http://onami.incubator.apache.org/spi/services.html >>> >>> http://people.apache.org/~simonetripodi/ >>> http://simonetripodi.livejournal.com/ >>> http://twitter.com/simonetripodi >>> http://www.99soft.org/
