So, they give you API to start a bunch of threads, but not stop them? Awesome...

On Tue, May 14, 2013 at 3:35 PM, Dan Gravell <[email protected]> wrote:
> In one case (JNotify) I create straight wrappers so the JARs are
> 'OSGi-ified', in another case I have the JARs embedded in the bundle that
> uses them (Lift).
>
> Adding the bundle activator might work if the support to shutdown the
> threads is in the API for the code I am using. However, it isn't, and as
> you know Java threads are co-operative so I can't simply stop them.
>
> Dan
>
>
> On Tue, May 14, 2013 at 2:57 PM, Felix Meschberger <[email protected]>wrote:
>
>> Hi Dan,
>>
>> Am 14.05.2013 um 07:16 schrieb Dan Gravell:
>>
>> >> With respect to when the thread has to stop, think about it the other
>> >> way around... what if you never stop any threads? This would mean that
>> >> objects allocated by the thread do not become candidates for garbage
>> >> collection; therefore neither do the classes that define those
>> >> objects; therefore, neither do the classloaders that loaded those
>> >> classes. So you're going to create a lot of garbage on the heap,
>> >> eventually resulting in OOME. Also, if a bundle's thread continues
>> >> running after the bundle has been stopped/updated then you could get
>> >> unexpected exceptions occurring in that thread; e.g. the bundle
>> >> classloader might not allow any new classes to be loaded, and calls
>> >> into OSGi using your BundleContext will probably throw
>> >> IllegalStateException. Generally these exceptions are not harmful
>> >> since you wanted the thread to die anyway, but they could cause
>> >> confusion if written to a log.
>> >>
>> >
>> > Just to be clear: you're preaching to the converted, I understand why the
>> > threads should be stopped. The issue is that I am re-using other projects
>> > that don't conform to these rules.... projects that were never written as
>> > OSGi bundles. It's a bit like the class loading assumptions you see in
>> > other projects... except arguably more subtle.
>>
>> So you are using libraries which are not built with OSGi in mind. Still
>> you need OSGi manifests for the libraries to become bundles. So you at
>> least wrap the libraries somehow to generate the manifest.
>>
>> How about adding a BundleActivator as part of this manifest generation ?
>> That BundleActivator could in the stop method stop any running threads. The
>> BundleActivator is part of the bundle so it may be aware of the library
>> internals and be able to stop any running threads.
>>
>> Regards
>> Felix
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to