Re: [Winstone-devel] I/O not working in shutdown()
Status: Beta
Brought to you by:
rickknowles
From: Rick K. <ri...@kn...> - 2006-05-04 10:54:54
|
Artur, The CVS version of Winstone is terminating correctly and completely when the WinstoneControl shutdown method is used. This is analogous to Tomcat's catalina stop command, and in fact uses a similar method. Tomcat will also hang when a spawned process doesn't exit cleanly. It's just that it suppresses most of the IOExceptions thrown during shutdown (as it does through large sections of the codebase). I think you really should consider writing your own embedded launcher. See http://winstone.sourceforge.net/#embedding as I mentioned last time. Create a class that manages a running instance like this: Map args = new HashMap(); args.put("webroot", "<my webroot dir>"); // or any other command line args, eg port winstone.Launcher.initLogger(args); winstone.Launcher winstone = new Launcher(args); // spawns threads, so your application doesn't block try { // choose your own custom termination condition (eg a keypress) while (not terminated) { // sleep } } finally { winstone.shutdown(); } This would give you the option of terminating the JVM with a System.exit() command like you seem to want to do. I'm going to try to answer your questions, even they do seem a little off track: 1. No. WinstoneControl is in a separate JVM, and doesn't wait for any kind of confirmation before terminating. 2. No I don't think so. The overhead in doing something like that is not worth the result. As I mentioned before, there's no room for protecting people from themselves when the goal is limited code size. Try to make sure your webapp terminates properly, and you'll have a more portable webapp. 3. More than the shutdown method ? Not sure what you mean here. One thing I would consider adding is an isRunning() method to the Launcher class. This would allow you to call shutdown(), then poll isRunning() for a limited time before calling System.exit() if you wanted. Mostly useful in the embedded context, but it would suit what you seem to want. Hope that helps, Rick randomJavaTroll wrote: > Hello, > > Thanks for your answer, it might exactly be that Ctrl-C terminates > both processes. Whether the pipe gets broken or not might even result > from some race condition, that is if Winstone sends the message before > the reading process terminates.I wanted to have a stop script for > Winstone and used Ctrl-C as a temporary solution only. As I do not use > shutdown hooks but listeners, the stop script should correct the problem. > > Still, I would like to write a that terminates the whole Winstone > process. It would send a shutdown message to Winstone, wait until > Winstone really shuts down, and then would terminate the Winstone > process. If I'd add waiting in contextDestroyed for termination of the > spawned process, complete shutdown of Winstone would ensure that the > process really terminated, so I could also safely terminate Winstone. > Thus I have two questions: > > 1. Is WinstoneControl waiting for the complete shutdown before exiting? > > 2. If not, perhaps some alternate shutdown parameter would be helpful, > that would wait for the shutdown to complete? > > 3. Perhaps adding exiting possibility to WinstoneControl would be helpful? > > That would make such a script very easy. > > Thanks, > Artur > -- Servlet v2.4 container in a single 160KB jar file ? Try Winstone (http://winstone.sourceforge.net/) |