Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Scheduled Restart Fails

Chuck Hill

Let's take a look at what happens in a little more depth. When the appointed time comes, wotaskd sends the application a message to start refusing new sessions. The application will start redirecting all subsequent requests without a session to an instance that is not refusing new sessions. Of course, in your case eventually all are refusing and the woadaptor throws up its hands in dismay and declares "No Instance Available".

...

OK, all that is well and good but what do you do about this? The first thing you want is to wait for this to happen and get a thread dump of the application. There are some instructions here:
http://lists.apple.com/archives/webobjects-dev/2003/Sep/msg00362.htmlImage Removed
Note that the file you need to edit is in /System/Library/WebObjects/JavaApplications/wotaskd.woa/Contents/Resources. Make sure that the appserver user has write permissions on the directory/file you point it to.

...

  • Log ID when session is created
  • Log ID when session's terminate() is called.
  • Log the application's remaining activeSessionsCount() when session's terminate() is called
  • Log start and stop of RR look in dispatchRequest() in application
  • Log when session are refused and activeSessionsCount() in refuseNewSessions(boolean)
  • Log when application's terminate() is called

Sending Notifications on Failed Restart

Chuck Hill

My first choice would be to fix your code. Second, it you have a long session time out and users are still working, then it could take quite a while for the app to restart (as long as the users keep working plus the session timeout). Third, if the JVM is waiting on a stuck thread there is not much you can do as any daemon thread to send the text page would have been killed already (hmmm, I think so at least). OK, so ignoring all that, start a timer as a daemon thread in refuseNewSessions(boolean) when true is passed. When the timer fires, send the text message. Or, if you like to sleep as much as I do, just call System.runtime().exit(1). If refuseNewSessions(boolean) is later called with false, kill the timer. That is just in case someone is clicking around in JavaMonitor.Category:WebObjects