Why not register your object with the Bundle Context, which you can get from 
the Component Context?

        reg = ccontext.getBundleContext().registerService( "<class>", 
serviceObject, properties);

In the deactivate, just unregister this service. It do not think it gets much 
easier?

Kind regards,

        Peter Kriens

On 11 jan 2011, at 01:09, David Jencks wrote:

> 
> On Jan 10, 2011, at 3:41 PM, Felix Meschberger wrote:
> 
>> Hi,
>> 
>> Am Montag, den 10.01.2011, 23:31 +0000 schrieb David Jencks: 
>>> Based on studying the DS spec and FELIX-2563 I think the answer is "yes" 
>>> but I'd like to double check.
>> 
>> Yes, a component is a single class, which is also used as the service if
>> it declares one or more Service elements.
>> 
>>> 
>>> I want to have a factory class as my DS Component that creates a single 
>>> framework-wide instance of the service that will get registered (configured 
>>> from the properties the component gets).  I don't want the factory 
>>> component class to implement any of the service interfaces.  Is there any 
>>> way to do this?
>> 
>> If you declare your component to be delayed (the default for components
>> to be registered as services), there is internally a factory (a
>> ServiceFactory actually) which creates a single instance of the
>> component as soon as the first client is requesting it, that is
>> accessing the service.
>> 
>> This is much like a ServiceFactory where each bundle actually gets the
>> same instance instead of a different instance for each bundle.
>> 
>> Now, what exactly should that factory you envision have to do ?
> 
> I have a bunch of classes designed to have all the configuration parameters 
> supplied in the constructor and set as final fields.  Once the configuration 
> parameters have been set, they can't be changed (the object will stop 
> working).  Since this will be used in non-osgi contexts, making the fields 
> non-final is not plausible.  I've written a component that takes the 
> properties from config admin, parses them into the constructor parameters, 
> and creates the object.  I'd like DS to be able to register the object I've 
> created as the service, rather than registering the component as the service. 
>  Apparently this is not possible with DS, so my workaround is to have my 
> component delegate to my service object.
> 
> My view is that requiring the code that converts between the config-admin 
> supplied properties and whatever configuration method a well designed object 
> might use be in the actual object is a serious separation of concerns issue.
> 
> thanks
> david jencks
> 
> 
>> 
>> Should it only create the component, once configuration is available ?
>> This can easily be achieved by the configuration-policy=required on the
>> Component element. And this is still handled by DS.
>> 
>>> 
>>> The workaround I've found is to have the component delegate to the service 
>>> implementation class instance and implement all the desired service 
>>> interfaces.  This seems less than ideal.
>>> 
>>> thanks
>>> david jencks
>>> 
>> 
>> -- 
>> [email protected]
>> +41 61 226 98 44
>> 
> 

Reply via email to