Yes unless they are all in use in which case it will spawn a new one up to the limit set from what I understand.
Owen Rubel 415-971-0976 [email protected] On Fri, May 1, 2015 at 3:34 PM, Paul King <[email protected]> wrote: > On 2/05/2015 2:27 AM, Søren Berg Glasius wrote: > >> But isn't it true, that if you use Sql with some database pool (and a >> connection instead) it will take a connection from the pool and return it >> when done? >> > > Most database pools will give you the datasource option, e.g. see the > example for Apache Commmons DBCP in the Groovy documentation: > > > http://docs.groovy-lang.org/next/html/documentation/#_connecting_with_a_datasource > > Hence the connection will be obtained from the datasource for each > operation and > closed after each operation (without any of the other closure connection > retention > methods in play). Closing a connection from a datasource will make it > available > for other calls (hence back in the pool). Closing an already closed > connection > (from a datasource) is benign. > > Cheers, Paul. > > Best regards / Med venlig hilsen, >> Søren Berg Glasius >> >> 40 Stevenson Ave, Berkeley, CA 94708 >> Mobile: (+1)510 984 8362, Skype: sbglasius >> --- Press ESC once to quit - twice to save the changes. >> >> On 1 May 2015 at 07:11, Henson Sturgill <[email protected] <mailto: >> [email protected]>> wrote: >> >> Ah, thanks Paul & Dinko! That makes sense. I actually hadn't used >> withInstance() before. Aren't closures amazing? Makes me really want to go >> back and learn some JavaScript. >> >> Anyway, here's my connection time-out test code now: >> >> /* Example Code */ >> import groovy.sql.Sql >> >> String query = "select count(*) cnt from spriden where >> upper(spriden_last_name) = 'STURGILL'" >> int minuteDelay = 0 >> >> Sql.withInstance("jdbc:oracle:thin:@SOMESERVER:15215:SOMETNS", >> "henson", "PASSWORD", >> "oracle.jdbc.driver.OracleDriver") >> { >> while (minuteDelay <= 120) { >> // Sleep increasing number of minutes >> Thread.sleep(1000 * 60 * minuteDelay) >> Date date = new Date() >> it.eachRow(query) { >> println "After ${minuteDelay} minutes - >> ${it.cnt} (${date})" >> } >> minuteDelay += 5 >> } >> } >> /* End Example */ >> >> >> On Fri, May 1, 2015 at 8:17 AM Paul King <[email protected] <mailto: >> [email protected]>> wrote: >> >> >> Yes, what Dinko said ... the second time! :-) >> >> In summary, if you create your Sql instance using the DataSource >> constructor, then a new connection will be obtained from the >> datasource (frequently a pool) for each operation and closed >> after each operation. There are cacheConnection(Closure) and >> withTransaction(Closure) methods which retain the connection >> across the scope of the closure call before closing it. >> >> If you use any of the withInstance(*args, Closure) methods then >> the >> connection will be created at the start of the withInstance >> closure >> block and closed automatically at the end of the block. >> >> Otherwise, it is up to you to manually close the connection. >> >> Cheers, Paul. >> >> On 1/05/2015 8:49 PM, Dinko Srkoč wrote: >> > Henson, sorry! It seems that I was wrong. If you made an Sql >> instance >> > by calling newInstance() then there would be only one JDBC >> connection >> > and it would be alive until close() is called explicitly, >> either >> > directly on the connection or on the Sql object itself, or >> when the >> > program terminates. >> > >> > So, calling eachRow() actually uses existing connection, it >> does not >> > create another one. What gets closed is the ResultSet and >> Statement >> > objects. >> > >> > When I answered your question it was 5 am in my time zone, and >> that is >> > my excuse. ;-) >> > >> > Cheers, >> > Dinko >> > >> > On 30 April 2015 at 21:46, Owen Rubel <[email protected] >> <mailto:[email protected]>> wrote: >> >> That was why I asked about a connection pool. With a >> connection pool, it >> >> won't get dropped as long as it is active. but inactive >> connections go back >> >> into the pool. You can use a connection pool without having >> the overhead of >> >> having to create a connection everytime you need to make a >> call and without >> >> having to manage the connections yourself. >> >> >> >> Owen Rubel >> >> 415-971-0976 >> >> [email protected] <mailto:[email protected]> >> >> >> >> On Thu, Apr 30, 2015 at 10:56 AM, Henson Sturgill < >> [email protected] <mailto:[email protected]>> >> >> wrote: >> >>> >> >>> Thanks Owen, and Dinko. >> >>> >> >>> I was just asking how connections were made. My goal was to >> keep a single >> >>> connection open and test it, a growing number of minutes >> between tries, to >> >>> see when/if the connection was being dropped. But since the >> connection is >> >>> made on each execution, my code will most likely never fail. >> >>> >> >>> Thanks so much, >> >>> Henson >> >>> >> >>> On Thu, Apr 30, 2015 at 1:04 AM Owen Rubel <[email protected] >> <mailto:[email protected]>> wrote: >> >>>> >> >>>> Just in case you are asking about connection pools, you can >> use grails >> >>>> datasource for defining the pool. >> >>>> >> >>>> here's a good thread on that... >> >>>> >> >>>> >> >>>> >> http://stackoverflow.com/questions/12291930/connection-pooling-and-prepared-statements-with-groovy-sql-sql-or-jdbc-in-grails >> >>>> >> >>>> >> >>>> On Wed, Apr 29, 2015 at 8:22 PM, Dinko Srkoč < >> [email protected] <mailto:[email protected]>> >> >>>> wrote: >> >>>>> >> >>>>> >> >>>>> On 29 Apr 2015 23:10, "Henson Sturgill" < >> [email protected] <mailto:[email protected]>> wrote: >> >>>>>> >> >>>>>> Been playing around with a hosted Oracle database that >> *seems* to be >> >>>>>> dropping connections. I made the following script to test >> (call to >> >>>>>> Sql.newInstance() not shown) but I'm curious -- does >> Groovy create the >> >>>>>> connection to the database on newInstance(), or every >> time eachRow() is >> >>>>>> called? >> >>>>>> >> >>>>> >> >>>>> Every time eachRow is called, and the connection is closed >> upon >> >>>>> consuming the dataset. >> >>>>> >> >>>>> Cheers, >> >>>>> Dinko >> >>>>> >> >>>>>> --- Example Code --- >> >>>>>> >> >>>>>> String query = "select count(*) cnt from spriden where >> >>>>>> upper(spriden_last_name) = 'STURGILL'" >> >>>>>> int minuteDelay = 0 >> >>>>>> >> >>>>>> while (minuteDelay <= 120) { >> >>>>>> Thread.sleep(1000 * 60 * minuteDelay); // Sleep >> increasing number >> >>>>>> of minutes >> >>>>>> Date date = new Date(); >> >>>>>> sql.eachRow(query) { >> >>>>>> println "After ${minuteDelay} minutes - >> ${it.cnt} (${date})" >> >>>>>> } >> >>>>>> minuteDelay += 5; >> >>>>>> } >> >>>>>> >> >>>>>> --- End Example --- >> >>>>>> >> >>>>>> Thanks so much you wonderful programmers! >> >> >> >> >> > >> >> >> --- >> This email has been checked for viruses by Avast antivirus >> software. >> http://www.avast.com >> >> >> > > --- > This email has been checked for viruses by Avast antivirus software. > http://www.avast.com > >
