Thanks guys for the input... yeah I understand that i can't predict when the gc will be run..
The reason I ask is that, I was (unfortunately) inherited with some badly designed code and I really dont have time to inspect it line by line to see whether each opened connection is closed or not.. So I thought of using finalize() as the quick-fix solution. :-) Anyway... I will use finalize() momentarily and see whether it works... if it does not, I will have no choice but to read and inspect the code line by line. *sigh* Regards. Rosdi. ----- Original Message ----- From: "Mike Jackson" <[EMAIL PROTECTED]> To: "Tomcat Users List" <[EMAIL PROTECTED]> Sent: Friday, February 21, 2003 12:48 PM Subject: RE: OT: Is it ok to close connection in finalize() ? > I've never heard of issues with putting things in finalize(), but I haven't > really looked into it. However my issue is that you can't predict how > quickly the objects will be collected (see other post). > > I'm not a java expert, I just play one on tv. > > --mikej > -=----- > mike jackson > [EMAIL PROTECTED] > > > -----Original Message----- > > From: Jake Robb [mailto:[EMAIL PROTECTED]] > > Sent: Thursday, February 20, 2003 8:36 PM > > To: Tomcat Users List > > Subject: Re: OT: Is it ok to close connection in finalize() ? > > > > > > And now all these other guys say that using finalize() is bad practice. I > > have to ask... Is it bad practice just for the reasons Mike Jackson > > described, or does the use of finalize() in general actually > > cause problems > > with the JVM? I've not heard that before. The 1.4 API makes no > > mention of > > any issues. > > > > Details on issues with finalize() would be appreciated, if that is indeed > > the case. > > > > -Jake > > > > > > Jake Robb wrote: > > > > > I apologize for not being familiar with this, but I have some insight to > > > offer. Bear with me: > > > > > > Is ConnCache your own class (i.e., did you write it)? If it > > is, I'd put a > > > call to close() in the finalize method of that ConnCache, not > > GeneralConn. > > > If it's not, I would expect that has already been done. > > > > > > If ConnCache not your class, and it does not close its own > > connection, then > > > yes, you're doing it right. There shouldn't be any issues with that > > > approach. > > > > > > finalize() is indeed guaranteed to run upon garbage collection, which in > > > turn is guaranteed to happen. However, garbage collection can > > happen at any > > > time, so the connection may not be closed immediately. If this > > is an issue > > > for you, you can call System.gc() to force it to garbage collect > > > immediately. > > > > > > -Jake > > > > > > > > > > > > Rosdi bin Kasim wrote: > > > > > >> This is a bit off topic. > > >> > > >> I am using connection pooling, and in my code, I open all the > > connection I > > >> need in an object constructor. > > >> Then I will close this connection in finalize(), which > > (according to what I > > >> read) will be executed during java garbage collect. > > >> > > >> --- sample code ------ > > >> > > >> public class GeneralConn { > > >> > > >> private ConnCache connCache; > > >> > > >> //open connection during object creation > > >> public GeneralConn () { > > >> try { > > >> connCache = ConnCache.getInstance(); > > >> dbConn = connCache.getConnection(); //grab a > > connection from > > >> the connection pool > > >> }catch (Exception e) { > > >> System.out.println("Fail to open connection: " + > > >> e.getMessage()); > > >> } > > >> } > > >> > > >> //close when this object is destroyed > > >> public void finalize () { > > >> try{ > > >> dbConn.close(); > > >> dbConn = null; > > >> }catch (Exception e) { > > >> System.out.println("Fail to close connection: " + > > >> e.getMessage()); > > >> } > > >> } > > >> } > > >> > > >> Would this be okay? is it guaranteed that finalize() will be > > executed during > > >> garbage collect?? > > >> > > >> > > >> Regards, > > >> Rosdi bin Kasim. > > >> > > >> > > >> > > >> > > >> --------------------------------------------------------------------- > > >> To unsubscribe, e-mail: [EMAIL PROTECTED] > > >> For additional commands, e-mail: [EMAIL PROTECTED] > > >> > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
