I'm new on the java universe, also new in the tomcat world. So, the issue is:
I need to run a java class as a daemon. This class should be able to comunicate with the tomcat requests.
In the past: when I did this in C, I executed the binary file as a background process.
Could you give me some suggestions how to proceed?
thanks ind advance!.
So it sounds like there are two parts to the answer. The first one is to make sure that your daemon gets started up with the tomcat container, and the other is to ensure that your thread gets properly configured so as not to keep the tomcat instance alive after shutdown.
Since the part about threading is simpler, I'll get that out of the way first. All the threads that you spawn should be daemon threads (e.g. you've called Thread.setDaemon(true)). Quoting from O'reilly's Exploring Java's Chapter on Threads :
Having live non-daemon threads will prevent the clean shutdown of tomcat. The reason for this is that tomcat keeps one non-daemon thread running up until it receives the shutdown message, at which point, said thread is stopped. If there are other non-daemon threads, then the JVM will happily keep puttering along, and you'll have to kill the process from the command line.
And now we get on to hooking into the lifecycle of the servlet container in order to spawn our service. There are two steps here...we have to implement a
ServletContextListener
as Jim Garrison suggested, and then we have to tell the container to load it. There are two things here:Step 1 : Implement a
ServletContextListener
:Step 2 : Declare it in your
web.xml
:And that should be that.
I think you want a
ServletContextListener
, which will get invoked at servlet context startup and shutdown. You can start and stop the daemon thread from there.