Considered that too... the trouble with that is OS X support. It would mean having to install a Java runtime as part of an 'installation' process. On OS X right now it's as simple as running a .app 'bundle' (overloaded term!) inside a DMG. If Java 6 isn't installed already, OS X does the work of installing for you. I sell my software, and I need as low a friction solution as possible.
Dan On Tue, May 14, 2013 at 3:52 PM, Bruce Jackson <[email protected]> wrote: > I'd remove JNotify and replace it with the new filesystem classes in J2SE > 7. That way you'll be able to sort out the thread management yourself. > > > On 14 May 2013, at 15:46, Dan Gravell <[email protected]> wrote: > > > Hmmmm, sorry, don't want to misrepresent things... In neither case do you > > *explicitly* start threads. > > > > JNotify's threads are started by the class initialisers... so load the > > class (as you do when you add a 'watch' via a static method for a > > directory) and the thread starts. > > > > Lift's are started as part of its HTTP request handling. I managed to > patch > > it to stop all the threads upon shutdown of its surrounding servlet > > container (I use Jetty) but this is just code I will have to maintain > going > > forward with new releases. > > > > Neither behaviour is particularly desirable but JNotify's age and lack of > > committers and Lift's usage scenarios are probably good reasons why the > > respective projects' resources are not spent on fixing this. > > > > Dan > > > > > > On Tue, May 14, 2013 at 3:41 PM, Neil Bartlett <[email protected]> > wrote: > > > >> 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] > >> > >> > > > > > This e-mail is only intended for the person(s) to whom it is addressed and > may contain CONFIDENTIAL information. Any opinions or views are personal to > the writer and do not represent those of INQ Mobile Limited, Hutchison > Whampoa Limited or its group companies. If you are not the intended > recipient, you are hereby notified that any use, retention, disclosure, > copying, printing, forwarding or dissemination of this communication is > strictly prohibited. If you have received this communication in error, > please erase all copies of the message and its attachments and notify the > sender immediately. INQ Mobile Limited is a company registered in the > British Virgin Islands. www.inqmobile.com. > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > >

