You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@felix.apache.org by Bulu <bu...@romandie.com> on 2014/09/02 11:55:50 UTC

Multithreading in OSGi

Dear all

My bundles need to use diverse threads to do their work (Timers, 
Workers, Events). And they need to clean them up on stop().

I have found this article 
(http://www.drdobbs.com/jvm/multithreading-java-osgi/191601642) which 
addresses the problem by using a Thread management class in each bundle, 
which keeps track of all threads and knows how to stop them when the 
bundle is stopping. It's a nice approach, but it's from 2006 and doesn't 
use Executors etc.

Also, my threads will work accross bundles - simplest example is the 
whiteboard pattern, which calls code in any registered listener, in any 
bundle.

Is the approach in this article the right way to go, to handle 
multithreading in OSGi? (ie. do you use it?)
Are there other recommended approaches & best practices on how to manage 
(start, stop, share) multiple threads in OSGi?
To avoid most of the synchronization, I will favor having only 1 main 
worker thread, where each client can submit tasks to perform 
(ExecutorService with a single thread). Is there a recommended OSGi 
approach for sharing this resource?

Thanks
   Philipp





---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Multithreading in OSGi

Posted by Frank Lyaruu <fl...@gmail.com>.
Just my two cents:

OGSi doesn't really deal with multithreading, and it works as good (or bad)
as any other java application.
However if you want to be fully dynamic, as in that any bundle can
disappear and reappear at any given time, it is hard to get right.

For a recent project I made extensive use of OSGi events, and that worked
quite well for me: Some thread posts an event, using the EventAdmin, and
other bundles (or the same one) can listen to these events (using an
EventHandler) and perhaps fire other events.

This avoids manual threading altogether, you use the thread pool of the
event manager  and works quite well for some use cases, perhaps yours. It
might require a hefty code refactoring, though.

An explanation of using the EventAdmin:

http://felix.apache.org/site/apache-felix-event-admin.html

I guess the 'DrDobb' approach works fine, but I'd only use it as a last
resort.

regards, Frank


On Tue, Sep 2, 2014 at 11:55 AM, Bulu <bu...@romandie.com> wrote:

> Dear all
>
> My bundles need to use diverse threads to do their work (Timers, Workers,
> Events). And they need to clean them up on stop().
>
> I have found this article (http://www.drdobbs.com/jvm/
> multithreading-java-osgi/191601642) which addresses the problem by using
> a Thread management class in each bundle, which keeps track of all threads
> and knows how to stop them when the bundle is stopping. It's a nice
> approach, but it's from 2006 and doesn't use Executors etc.
>
> Also, my threads will work accross bundles - simplest example is the
> whiteboard pattern, which calls code in any registered listener, in any
> bundle.
>
> Is the approach in this article the right way to go, to handle
> multithreading in OSGi? (ie. do you use it?)
> Are there other recommended approaches & best practices on how to manage
> (start, stop, share) multiple threads in OSGi?
> To avoid most of the synchronization, I will favor having only 1 main
> worker thread, where each client can submit tasks to perform
> (ExecutorService with a single thread). Is there a recommended OSGi
> approach for sharing this resource?
>
> Thanks
>   Philipp
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
> For additional commands, e-mail: users-help@felix.apache.org
>
>