Personally, I use Quartz (
http://www.opensymphony.com/quartz/). I have a servlet that is initialized when my app starts up. The servlet sets up my schedules and starts up the scheduler. It has worked well for me. The only problem I have is when trying to shutdown the app server while doing a long-running job. Since Quartz uses its own thread pool, there are occasionally times when I have to forcibly stop Glassfish.
[Message sent by forum member 'trekkyleaper' (trekkyleaper)]
http://forums.java.net/jive/thread.jspa?messageID=286923