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

Reply via email to