So as I mentioned earlier you have 2 options: (a) build time - which is exactly how @Component annotations are processed. Basically treat every class implementing the interface as if it was annotated with @Component and @Service
(b) deploy / run time - which is more or less what you suggest although I can imagine different implementations So I fully agree with you that it can be done. But in the context set by the original question: - Is this possible with DS as of now - AFAIK no - is it something that DS/SCR should support - I don't know. I think it could, but again there may be implications I'm not aware of. On Thu, Feb 5, 2015 at 9:29 PM, David Jencks <david_jen...@yahoo.com.invalid > wrote: > I still don't understand in your example what is supposed to create an > instance of your button class. > > I think it's pretty odd, but I think with my proposal for extension > annotation processors for DS and metatype annotation processing in bnd, if > you were willing to use DS and mark the button class you actually want to > be a real live button with @Component so DS knows enough to create one, you > could write an extension processor that would find your @AutoRegister > annotation on the interface in the inheritance hierarchy and add it to the > exposed services. > > thanks > david jencks > > On Feb 5, 2015, at 3:21 PM, Milen Dyankov <milendyan...@gmail.com> wrote: > > > Agree to some extend. However here is what I meant with a stupid example. > > Say I have GUI where I can dynamically add buttons to perform operations > on > > something. If I could do > > > > @AutoRegisterComponentsFromClassesImplementingMe > > public interface Button { > > void performActionOn (Something something); > > } > > > > public abstract class AbstractButton implements Button { > > // some common logic here > > } > > > > then I could say to my not-so-keen-about-osgi colleagues "You know what, > > just extend the AbstractButton, add your logic, build (tooling will make > it > > a bundle), deploy and your button will appear in the UI"! Again it's NOT > > that there is some crucial missing feature in OSGi / DS but rather a > matter > > of convenience! > > > > > > > > > > On Thu, Feb 5, 2015 at 8:46 PM, David Jencks > <david_jen...@yahoo.com.invalid > >> wrote: > > > >> With DS and the spec annotations, if your component class directly > >> implements the interface, it will be registered as a service exposing > that > >> interface. > >> > >> If your class is not a DS component, I'm not sure what you expect to > >> create an instance of your class in order to register it as a > service.. I > >> guess you could register a byte-code weaver that looked for classes > >> implementing your interface of interest, and added byte code that got > the > >> bundle context from the class loader, and registered the instance in the > >> service registry, but I don't think you would actually find that very > >> useful as there would be no way to specify service properties in order > to > >> distinguish different instances. It would certainly interfere with any > >> existing component model such as DS or blueprint and probably with any > >> attempt to register a service in code. > >> > >> david jencks > >> > >> On Feb 5, 2015, at 2:37 PM, Milen Dyankov <milendyan...@gmail.com> > wrote: > >> > >>> I may be interpreting Pawel's case wrong but I also have had situations > >> in > >>> the past where I wish I was able to somehow mark a interface (by using > >>> annotation for example) and basically say "whoever implements that > >>> interface should be automatically registered as a service"! AFAIK that > is > >>> not possible with SCR/DS although it may be very convenient in some > >> cases. > >>> > >>> Now if such feature was to be implemented the question is weather it > >> should > >>> happen at run/deploy time (probably expensive) or build time (rather a > >>> matter of tooling and not strictly related to DS). However there may > also > >>> be some side effects I have not thought about and perhaps a good reason > >> not > >>> to have it. > >>> > >>> Just my 2 cents > >>> > >>> Best, > >>> Milen > >>> > >>> On Thu, Feb 5, 2015 at 8:15 PM, David Jencks > >> <david_jen...@yahoo.com.invalid > >>>> wrote: > >>> > >>>> The default for scr annotations is to expose all the directly > >> implemented > >>>> interfaces. If you want something else you can explicitly list the > >> classes > >>>> to expose in the @Component annotation.. This is really easy to > >> understand > >>>> from the class itself. You can re-list an interface implemented by a > >>>> superclass or that is a super-interface of a directly implemented > >> interface > >>>> if you want, that won't hurt your class. Your proposal of "all > >>>> bundle-exported interfaces" seems really restrictive and odd to me, > any > >>>> directly implemented interface from another bundle (say from a spec) > >> would > >>>> force you to not use the default. To understand what the component > >> exposes > >>>> you would also have to try to figure out what the bundle exports, > which > >> is > >>>> not obvious from the component class itself. > >>>> > >>>> thanks > >>>> david jencks > >>>> > >>>> On Feb 5, 2015, at 1:06 PM, Pawel Pogorzelski < > >>>> pawel.pogorzels...@gmail.com> wrote: > >>>> > >>>>> Alright, thanks Neil. I can see can see some corner cases where this > >>>>> behavior could would be desired. It's just the default that bothers > me > >> - > >>>> I > >>>>> think by default a service should be registered under all the > >>>>> bundle-exported interfaces. After all, if you want to hide > >> implementation > >>>>> you do it differently - by defining a public interface and hiding the > >>>> rest > >>>>> in private packages. The same with lookups - if you want to get a > >>>> specific > >>>>> instance then OSGi filters is the way to go. So, if you're relaying > on > >>>> not > >>>>> registering under all interfaces probably means there's something > wrong > >>>> in > >>>>> your design or the container you run in. > >>>>> > >>>>> Paweł > >>>>> > >>>>> On Thu, Feb 5, 2015 at 5:37 PM, Neil Bartlett <njbartl...@gmail.com> > >>>> wrote: > >>>>> > >>>>>> Services in OSGi are intended so that you can implement many > >> interfaces > >>>>>> but publish under a subset. Therefore the set of published services > >>>> must be > >>>>>> listed explicitly. > >>>>>> > >>>>>> Neil > >>>>>> > >>>>>> > >>>>>> On Thursday, 5 February 2015 at 16:15, Pawel Pogorzelski wrote: > >>>>>> > >>>>>>> Thanks Ferry, it indeed works. Is there any way of doing it without > >>>>>>> specifying all the object supertypes during the registration? Maybe > >>>> using > >>>>>>> Felix SCR annotations instead of OSGi ones? > >>>>>>> > >>>>>>> Cheers, > >>>>>>> Pawel > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> On Thu, Feb 5, 2015 at 5:02 PM, Ferry Huberts <maili...@hupie.com> > >>>>>> wrote: > >>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> On 05/02/15 16:59, Pawel Pogorzelski wrote: > >>>>>>>> > >>>>>>>>> Guys, > >>>>>>>>> I have a generic interface IRepository<T> extended by > >>>>>> IAppleRepository, > >>>>>>>>> IOrangeRepository and so on. Concrete implementations like > >>>>>> AppleRepository > >>>>>>>>> are registered in the container with non-generic interfaces like > >>>>>>>>> IAppleRepository. Is it possible to tell DS engine I need every > >>>>>> service > >>>>>>>>> sublassing IRepository? Corresponding line in my component.xml > >> looks > >>>>>> like > >>>>>>>>> follows: > >>>>>>>>> > >>>>>>>>> <reference name="Repository" cardinality="0..n" policy="dynamic" > >>>>>>>>> interface="com.Whatever.IRepository" bind="addRepository" > >>>>>>>>> unbind="removeRepository"/> > >>>>>>>>> > >>>>>>>>> but it doesn't work. I'm on Felix 4.4.1. > >>>>>>>> > >>>>>>>> > >>>>>>>> Then the bundles don't advertise the IRepository interface but > their > >>>>>>>> subclass(es). > >>>>>>>> > >>>>>>>> Make the bundles advertise IRepository and it'll work. > >>>>>>>> > >>>>>>>> > >> --------------------------------------------------------------------- > >>>>>>>> To unsubscribe, e-mail: users-unsubscr...@felix.apache.org > >>>>>>>> For additional commands, e-mail: users-h...@felix.apache.org > >>>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>> > >>>> > >>>> --------------------------------------------------------------------- > >>>> To unsubscribe, e-mail: users-unsubscr...@felix.apache.org > >>>> For additional commands, e-mail: users-h...@felix.apache.org > >>>> > >>>> > >>> > >>> > >>> -- > >>> http://about.me/milen > >> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: users-unsubscr...@felix.apache.org > >> For additional commands, e-mail: users-h...@felix.apache.org > >> > >> > > > > > > -- > > http://about.me/milen > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@felix.apache.org > For additional commands, e-mail: users-h...@felix.apache.org > > -- http://about.me/milen