When designing an application that uses JMS connections make sure you use a methodology that sparingly uses connections, by either pooling them or using the same connection for multiple sessions.
The JMS connection uses two threads and the sessions use one thread each. Since these threads are not taken from a pool and the resultant objects aren’t pooled, you could run out of memory during periods of heavy usage.
One workaround is to move createTopicConnection into the init of the servlet.
Make sure to specifically close the session, or it will stay open, which ties up resources.