Hi Godwin,

You can track all OSGI Service implementations which implements a
particular interface and then select the required service out of them.

Following is a sample. In this sample addMessageSendingModule and
removeMessageSendingModule are binded to add and remove services which
implements interface
"org.wso2.carbon.identity.application.message.mgt.MessageSendingModule".

At the time of "addMessageSendingModule" execution you can get information
about particular service and decide functionality over it.

/**
 * @scr.reference name="ldap.tenant.manager.listener.service"
 *
interface="org.wso2.carbon.identity.application.message.mgt.MessageSendingModule"
 * cardinality="0..n" policy="dynamic"
 * bind="addMessageSendingModule"
 * unbind="removeMessageSendingModule"
 * @scr.component name="identity.application.message.mgt" immediate="true"
 */

@SuppressWarnings("unused")
public class ApplicationMessageMgtServiceComponent {

    private List<MessageSendingModule> messageSendingModules = new
            ArrayList<MessageSendingModule>();

    protected void activate(ComponentContext ctxt) {
       // Activate logic goes here
    }

    protected void deactivate(ComponentContext ctxt) {
       // Deactivate logic goes here
    }

    /**
     * Will register message sending modules dynamically. This method is
used
     * to bind the notification sending modules to msg mgt component
     *
     * @param module MessageSendingModule
     */
    protected void addMessageSendingModule(MessageSendingModule module) {
        if (log.isDebugEnabled()) {
            log.debug("Registering a message sending module " +
module.getModuleName());
        }
        if (configBuilder != null) {

module.init(configBuilder.getProperties(module.getModuleName()));
            messageSendingModules.add(module);
        }

    }

    /**
     * This method is used to unbind notification sending modules. Whenever
     * a module is dynamically deactivated, this method will unregister
them.
     *
     * @param module MessageSendingModule
     */
    protected void removeMessageSendingModule(MessageSendingModule module) {
        if (log.isDebugEnabled()) {
            log.debug("Removing a message module " +
module.getModuleName());
        }
        messageSendingModules.remove(module);
    }


On Mon, Nov 17, 2014 at 11:18 AM, Godwin Amila Shrimal <[email protected]>
wrote:

> Hi
>
> Most of the time we are having one OSGI Service implementation in carbon
> products. There are situation we require to have multiple OSGI
> implementations. Then how can we add declarative reference to particular
> service implementation.
>
> Thanks
> Godwin
>
> --
> *Godwin Amila Shrimal*
> Senior Software Engineer
> WSO2 Inc.; http://wso2.com
> lean.enterprise.middleware
>
> mobile: *+94772264165*
> linkedin: *http://lnkd.in/KUum6D <http://lnkd.in/KUum6D>*
> twitter: https://twitter.com/godwinamila
>
> _______________________________________________
> Dev mailing list
> [email protected]
> http://wso2.org/cgi-bin/mailman/listinfo/dev
>
>
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to