That makes sense. There have been discussions on the list that a particular 'design pattern' be used to ensure connections are closed everywhere. ----- Original Message ----- From: "Chris Pratt" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Tuesday, February 04, 2003 8:07 PM Subject: Re: odd oracle error [MAX cursors]
> I normally centralize all data access in the Data Model using an MVC > architecture. I also like to add an extra layer of abstraction and usually > use a pluggable data model to allow flexibility. > (*Chris*) > > ----- Original Message ----- > From: "Manavendra Gupta" <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]> > Sent: Wednesday, February 05, 2003 9:09 AM > Subject: Re: [SERVLET-INTEREST] odd oracle error [MAX cursors] > > > > Would you recommend using this pattern across the entire code base where > > there are several entities (or java classes) interact with the persistence > > layer? Would you recommend a copy and paste of this code? > > > > When I set out to suggest that design strategy, I did not go against this > > accepted pattern - use this, by all means, but also, to reduce the copy > > paste of the code, and the possibilty of forgetting something somewhere, I > > wanted a strategy that would have all this code centralized. > > > > ~Manav. > > ----- Original Message ----- > > From: "Chris Pratt" <[EMAIL PROTECTED]> > > To: <[EMAIL PROTECTED]> > > Sent: Tuesday, February 04, 2003 5:35 PM > > Subject: Re: odd oracle error [MAX cursors] > > > > > > > I have used this pattern over and over with all manner of JDBC drivers > and > > > have not found one that it does not work with. There were issues with > > > performance in the initial 1.1 JVM's since try/catch blocks had a fairly > > > severe overhead, but with the newer 1.2+ JVM's it's negligible. I do > > > recommend a Connection Pool for actually handling the Connections as > > shown: > > > > > > try { > > > Connection con = DbConnectionPool.getConnection(); > > > try { > > > PreparedStatement stm = con.prepareStatement("SELECT SOMETHING FROM > > > SOMEWHERE"); > > > try { > > > stm.setString(1,"Someone"); > > > ResultSet res = stm.executeQuery(); > > > try { > > > while(res.hasNext()) { > > > // Do something with the Result Set values > > > } > > > } finally { > > > res.close(); > > > } > > > } finally { > > > stm.close(); > > > } > > > } finally { > > > DbConnectionPool.releaseConnection(con); > > > } > > > } catch(SQLException x) { > > > x.printStackTrace(); > > > } > > > > > > There is no way to strand any database resources with this model. > > > (*Chris*) > > > > > > > > > ----- Original Message ----- > > > From: "Manavendra Gupta" <[EMAIL PROTECTED]> > > > To: <[EMAIL PROTECTED]> > > > Sent: Tuesday, February 04, 2003 5:53 AM > > > Subject: Re: [SERVLET-INTEREST] odd oracle error [MAX cursors] > > > > > > > > > > I'd like to re-open this thread for discussion. > > > > > > > > IMO, following is what has been proposed so far: > > > > > > > > 1. Use connection pooling. > > > > 2. Use a singleton class as connection manager > > > > OR (if your app server supports it) > > > > 1. Configure JNDI datasource > > > > 2. Configure connection pool manager > > > > > > > > There have been repeated discussions on the best way to close > connection > > > to ensure all resources are freed up properly. There is also that issue > > with > > > Oracle implicit cursors not being closed unless you explicitly close the > > > statement. > > > > > > > > Instead of 'making sure' to close connection in the finally block > (which > > I > > > believe is a repitition of code anyway), can we not have a design > strategy > > > that does this automatically for us? Here's what I suggest (apart from > the > > > steps listed above): > > > > 1. Create a 'gateway' or 'adapter' class that interfaces with the > > > connection manager (read: calls the getConnection(), freeConnection() > and > > > other DB interaction methods) with member variables for statement and > > > resultset. > > > > 2. This 'gateway' or 'adapter' exposes methods to perform generic > > database > > > methods (select, insert, update, delete) - you'd as it always use a > > standard > > > gateway for all your entities to use instead of all entities talking to > > the > > > database, thereby splattering around the persistence code all over the > > > application. > > > > 3. The destructor of this gateway closes the statement as well as the > > > resultset. > > > > > > > > So, you have a domain model (or table gateway, row gateway or whatever > > > object-relational mapping you chose), your database code is at one > single > > > place, your connections are being managed and best, you don't have to > > write > > > a single additional line to ensure you don't exceed the MAX_CURSORS > > (unless > > > of course your methods take too long to complete and the load on your > > > application is extremely high - in which case you'd have to increase the > > > cursors anyway, no matter what you choose). > > > > > > > > One of the pitfalls I see of this design is higher object > > > creation/destruction, but your statements/resultsets had to be closed > > anyway > > > so you just have 4 additional bytes being used on the stack. > > > > > > > > Comments? > > > > > > > > Cheers, > > > > Manav. > > > > > > > > > > > > > > ___________________________________________________________________________ > > > > To unsubscribe, send email to [EMAIL PROTECTED] and include in the > > > body > > > > of the message "signoff SERVLET-INTEREST". > > > > > > > > Archives: http://archives.java.sun.com/archives/servlet-interest.html > > > > Resources: > http://java.sun.com/products/servlet/external-resources.html > > > > LISTSERV Help: http://www.lsoft.com/manuals/user/user.html > > > > > > > > > > > > > > > > > ___________________________________________________________________________ > > > To unsubscribe, send email to [EMAIL PROTECTED] and include in the > > body > > > of the message "signoff SERVLET-INTEREST". > > > > > > Archives: http://archives.java.sun.com/archives/servlet-interest.html > > > Resources: http://java.sun.com/products/servlet/external-resources.html > > > LISTSERV Help: http://www.lsoft.com/manuals/user/user.html > > > > > > > > ___________________________________________________________________________ > > To unsubscribe, send email to [EMAIL PROTECTED] and include in the > body > > of the message "signoff SERVLET-INTEREST". > > > > Archives: http://archives.java.sun.com/archives/servlet-interest.html > > Resources: http://java.sun.com/products/servlet/external-resources.html > > LISTSERV Help: http://www.lsoft.com/manuals/user/user.html > > > > ___________________________________________________________________________ > To unsubscribe, send email to [EMAIL PROTECTED] and include in the body > of the message "signoff SERVLET-INTEREST". > > Archives: http://archives.java.sun.com/archives/servlet-interest.html > Resources: http://java.sun.com/products/servlet/external-resources.html > LISTSERV Help: http://www.lsoft.com/manuals/user/user.html > ___________________________________________________________________________ To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff SERVLET-INTEREST". Archives: http://archives.java.sun.com/archives/servlet-interest.html Resources: http://java.sun.com/products/servlet/external-resources.html LISTSERV Help: http://www.lsoft.com/manuals/user/user.html