Hi, On 21.05.2010 17:44, Tom Kesling wrote: > Thank for the feedback Angelo. > > I'm developing an application has config data managed externally. The > config data represents components and their dependencies. The > components are OSGI services and there are multiple service instances > (so that sets of components have their own instances). > > I have started with using DS and ComponentFactories. The config is > turned into properties and then new components are created using > componentfactory.newInstance(properties). > > I was looking into the ConfigurationAdmin api and trying to understand > if/how I could use it to make this easier and write less code. That > is when I discovered the ManagedServiceFactory. > > My understanding is that a ComponentFactory and a > ManagedServiceFactory can both be used to return multiple instances of > a service. > > The instances returned by the ManagedServiceFactory are associated > with a specific configuration instance and can be managed by > ConfigurationAdmin. If I understand this correctly, I should be able > to create/update service instances via ConfigurationAdmin by > getting/creating the Configuration for a specific service instance and > calling the update method with the properties. This seems like less > code and would be generic for any service type. I'm uncertain if/how > I can define the service and it's dependencies via DS which is very > attractive.
Declarative Services takes care of making the distinction. Consider a component (non-ComponentFactory, but either immediate, service or service factory) with name componentA. If there is a Configuration whose PID is "componentA", that configuration is provided to a single Component instance. If there exist one or more factory Configuration instances whose factory PID is "componentA", DS will create and activate one component instance for each factory configuration. Likewise if such a factory is deleted, DS will remove (deactivate and dispose) the respective component instance. So, if you want to have the user control component instances through factory configurations, declare your components to as usual and set the configuration-policy attribute to "required". This ensure that the component is only instantiated and created for existing factory configurations. If there is no factory configuration, there is no component instance. > > I'm uncertain how a ComponentFactory and their instances work with > ConfigurationAdmin and if the scenario above is possible. ComponentFactory instances are configured mainly with the configuration given to the newInstance method (apart from the default properties in the descriptor and the "global" configuration applying to all instances of the same ComponentFactory). Hope this helps. Regards Felix > > This is all new to me so I'm sure I'm missing things. > > Any advice on how to approach this is appreciated. > > Thanks, > T > > > > > > On Thu, May 20, 2010 at 4:44 PM, Angelo van der Sijpt > <[email protected]> wrote: >> It depends on what you need, and the mechanism you use for dependency >> management. In short, >> - ManagedServiceFactory is a part of the Configuration Admin specification >> from the Compendium (section 104). It allows you to create zero or more >> services based on a configuration, in much the same way as you would >> configure exactly one service using a ManagedService. >> - ComponentFactory is a part of the Declarative Services specification >> (Compendium, 112), and is used for creating instances of a service on-demand >> (see 112.2.4). >> >> If you need to generate services 'externally', for instance, you have a >> service that discloses information based on some file system paths, you can >> use a ManagedServiceFactory: you create a configuration for each of the >> paths. >> If you need to be able to create a service for each 'getting' of the service >> (so they don't get shared between components using the service), and you >> happen to use SCR as a dependency management mechanism, you can go with >> ComponentFactory. >> >> So, they are not necessarily comparable. What is your use case? >> >> Angelo >> >> On May 20, 2010, at 8:26 PM, Tom Kesling wrote: >> >>> Hello, >>> I'm trying to understand when to use a ManagedServiceFactory vs a >>> ComponentFactory. >>> >>> Any advice is appreciated. >>> >>> Thanks, >>> T >>> _______________________________________________ >>> OSGi Developer Mail List >>> [email protected] >>> https://mail.osgi.org/mailman/listinfo/osgi-dev >> >> >> _______________________________________________ >> OSGi Developer Mail List >> [email protected] >> https://mail.osgi.org/mailman/listinfo/osgi-dev >> > > _______________________________________________ > OSGi Developer Mail List > [email protected] > https://mail.osgi.org/mailman/listinfo/osgi-dev > _______________________________________________ OSGi Developer Mail List [email protected] https://mail.osgi.org/mailman/listinfo/osgi-dev
