On Sat, Jan 23, 2010 at 5:31 AM, Samisa Abeysinghe <[email protected]> wrote:

> This looks like good content for a KB on OT :)

will do.

is there a place to put this kind of commonly usable classes?

thanks,
Amila.

>
> Samisa...
>
> On Fri, Jan 22, 2010 at 8:06 PM, Amila Suriarachchi <[email protected]>wrote:
>
>> hi,
>>
>> When implementing the LDAP carbon component I got the requirement to
>> deploy the LDAP carbon component before
>> User core component. The other requirement was that the User core
>> component should wait only if the LDAP component present.
>>
>> There was a similar work done by Sameera to deploy Axis2 bundle and Axis2
>> modules before the carbon core. So I used the same
>> method but implemented it in a generic manner so that any one can use it.
>>
>> The only thing I wrote was a bundle Activator which can be extended by any
>> component which need others to start before it.
>>
>> public abstract class BundleCheckActivator implements BundleActivator {
>>
>>     private static final Log log =
>> LogFactory.getLog(BundleCheckActivator.class);
>>
>>     private String DEPLOY_BEFORE_PREFIX = "DeployBefore";
>>
>>     public void start(final BundleContext bundleContext) throws Exception
>> {
>>
>>         // check for the services should deploy before this if there
>> exists.
>>         // if there are such services we wait for such bundles to deploy
>> and gets the notification
>>         // through a service listner.
>>
>>         // first check whether there are such services and they have
>> already deployed.
>>         String requiredItem = null;
>>         final List<String> pendingBundles = new ArrayList<String>();
>>         for (Bundle bundle : bundleContext.getBundles()) {
>>             requiredItem = (String)
>> bundle.getHeaders().get(DEPLOY_BEFORE_PREFIX + getName());
>>             if ((requiredItem != null) && (bundle.getState() !=
>> Bundle.ACTIVE)) {
>>                 // i.e this bundle should start before the user manager
>> but yet has not started
>>                 pendingBundles.add(requiredItem);
>>             }
>>         }
>>
>>         if (pendingBundles.isEmpty()) {
>>             startDeploy(bundleContext);
>>         } else {
>>             BundleListener bundleListener = new BundleListener() {
>>                 public void bundleChanged(BundleEvent bundleEvent) {
>>                     synchronized (pendingBundles) {
>>                         if (bundleEvent.getType() == BundleEvent.STARTED)
>> {
>>                             String requiredItem =
>>                                     (String)
>> bundleEvent.getBundle().getHeaders().get(DEPLOY_BEFORE_PREFIX + getName());
>>                             pendingBundles.remove(requiredItem);
>>                             if (pendingBundles.isEmpty()) {
>>                                 // now start the deployment
>>                                 bundleContext.removeBundleListener(this);
>>                                 try {
>>                                     startDeploy(bundleContext);
>>                                 } catch (Exception e) {
>>                                     log.error("Can not start the bundle ",
>> e);
>>                                 }
>>                             }
>>                         }
>>                     }
>>                 }
>>             };
>>             bundleContext.addBundleListener(bundleListener);
>>         }
>>     }
>>
>>     public abstract void startDeploy(BundleContext bundleContext) throws
>> Exception;
>>
>>     public abstract String getName();
>>
>> }
>>
>> here in the actual Activator code can implement the startBundle method and
>> should give a name for that bundle.
>>
>> Then any module which should before this bundle should have a header with
>> name -- DeployBefore + bundleName
>>
>> eg. For ldap component this can be done by adding following entry to
>> pom.xml
>> <DeployBeforeUserCore>directoryServer</DeployBeforeUserCore>
>>
>> thanks,
>> Amila.
>>
>> _______________________________________________
>> Carbon-dev mailing list
>> [email protected]
>> https://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev
>>
>>
>
>
> --
> Samisa Abeysinghe
> Director, Engineering - WSO2 Inc.
>
> http://www.wso2.com/ - "lean . enterprise . middleware"
>
> _______________________________________________
> Carbon-dev mailing list
> [email protected]
> https://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev
>
>
_______________________________________________
Carbon-dev mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev

Reply via email to