Thanks, Konstantine, Cris and Mark.  I will be reading the docs.  
"... global objects should not retain references to objects loaded by your web 
application..."  We intend on only doing it the opposite direction, that is, 
loading global objects into web apps.  That is the whole point, we want some 
global objects to live on, after the web app is gone. 
"... allow each app to have one open..." - yes, and we have a load 
balancer/round robbin method of assigning one connection to one session.  It is 
very fast, obtain connection (which is already alive), query, get result set, 
release connection (back to the pool).  
Thanks for the pointers, I will be checking the class loader docs.  So far, I 
have used class loader for database connections.  
Thanks
joe

-----Original Message-----
From: Konstantin Kolinko [mailto:knst.koli...@gmail.com] 
Sent: Tuesday, June 26, 2012 12:16 PM
To: Tomcat Users List
Subject: Re: Wish to use an independent class module in Tomcat

2012/6/26 Cotton, Joseph B <bcot...@dpscs.state.md.us>:
> My question may be covered by the Tomcat documentation and I am just 
> confused by all the new terminology.  I have spent hours in reading 
> and still I am looking to an answer.
>
> We wish to have a class running on Tomcat that contains system wide 
> info and multiple database connections into DB2 on the mainframe.   
> All other apps runing on Tomcat will open an instance of this class to 
> access the static info and one of five open connections.  Opening and 
> closing database connections is very slow and we wish to leave open 
> the connections and just reuse them as needed.
>
> We wrote the class and it runs ok.  Yet to get it to run with an app, 
> we need to load the class jar file into the app and references in 
> context.xml and web.xml as listed in the documentation. But that 
> defeats the purpose of the global app because then there are multiple 
> instances of the class.
>
> We tried to insert a reference in <GlobalNamingResources> of server.xml.
> It doesn't seem to work for us.
>
> Or are we off base with this design?  Is app to app communication 
> allowed?  Can I call a class from one app to another without first 
> loading the called class into the calling class?
>
>(...)

The first thing you need to consider in your scenario is behaviour of 
classloaders.
This is documented here:

http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html

One caveat is that, for the reasons documented there, when you put some class 
into the Common classloader,  you must remove it from your webapp.

Other caveat is that such global objects should not retain references to 
objects loaded by your web application or to its classloader (which is 
Thread.getContextClassloader() aka TCCL).  The lifecycle of a webapplication is 
shorter than the one of Tomcat. A failure to prevent such references will 
prevent proper garbage collection of web application classes when the 
application is stopped.


As for GlobalNamingResources,  there are several ways to pass a reference to a 
global object into the web application.  Using JNDI (via GlobalNamingResources 
or directly) is one of them.

Best regards,
Konstantin Kolinko

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to