Hi, Thank you all for the help, I will change the codes according to your advise and try to resolve the problem.
Regards, Liu Xiangqian Wizitsoft Information Technology Ltd. www.wizitsoft.com | (86) 010-62670653 ext 614 2009/9/14 Jack Liu <jack....@aicent.com> > Yes, you're right, Scott. > org.ofbiz.entity.connection.DBCPConnectionFactory tells me. > > > -----Original Message----- > From: Scott Gray [mailto:scott.g...@hotwaxmedia.com] > Sent: 2009年9月14日 11:02 > To: user@ofbiz.apache.org > Subject: Re: Do we need to manually close SQLProcesser? > > java.sql.Connection is an interface, the implementation is > org.apache.commons.dbcp.PoolableConnection. > > Regards > Scott > > On 14/09/2009, at 2:55 PM, Jack Liu wrote: > > > In the close method of class SQLProcessor, the variable _connection > > is absolutely an instance of java.sql.Connection not > > PoolableConnection. > > > > > > > > > > > > -----Original Message----- > > From: Scott Gray [mailto:scott.g...@hotwaxmedia.com] > > Sent: 2009年9月14日 10:44 > > To: user@ofbiz.apache.org > > Subject: Re: Do we need to manually close SQLProcesser? > > > > > > > > No the connection implementation is a PoolableConnection and closing > > > > it returns it to the pool, if you don't close it then it won't be > > > > returned until the SQLProcessor is finalized at which point it closes > > > > the connection itself. Just to reiterate in case it isn't clear, you > > > > should always call SQLProcessor.close() when you are done with it. > > > > > > > > Regards > > > > Scott > > > > > > > > > > > > On 14/09/2009, at 2:30 PM, Jack Liu wrote: > > > > > > > >> Hi, Larry > > > >> > > > >> From the constructor of class SQLProcesser, there is no need to > > > >> close it manually. > > > >> > > > >> /** > > > >> * Construct an object with an connection given. The connection > > > >> will not > > > >> * be closed by this SQLProcessor, but may be by some other. > > > >> * > > > >> * @param helperName The datasource helper (see entityengine.xml > > > >> <datasource name="..">) > > > >> * @param connection The connection to be used > > > >> */ > > > >> public SQLProcessor(String helperName, Connection connection) { > > > >> this.helperName = helperName; > > > >> this._connection = connection; > > > >> > > > >> // Do not commit while closing > > > >> if (_connection != null) { > > > >> _manualTX = false; > > > >> } > > > >> } > > > >> > > > >> > > > >> And the close method closes the true connection, not a proxy or > > > >> something else, > > > >> So if you close it by yourself, the pool will be run out. > > > >> > > > >> > > > >> > > > >> > > > >> -----Original Message----- > > > >> From: Larry.Liu [mailto:xiangqian....@wizitsoft.com] > > > >> Sent: 2009年9月14日 9:45 > > > >> To: user@ofbiz.apache.org > > > >> Subject: Re: Do we need to manually close SQLProcesser? > > > >> > > > >> Hi Gray, > > > >> > > > >> Thanks for your help, > > > >> > > > >> So according to my understanding, trying to close the SQLProcessor > > > >> will > > > >> cause available connection in the pool fewer and fewer and there > > > >> will be "No > > > >> ManagedConnections Available!" exception in the end, isn't it? > > > >> > > > >> Now we have a B2C website running on ofbiz, using Database mysql5.0 > > > >> > > > >> we only have about 2000 visitors one day, we have set the max mysql > > > >> connection to 150, in my assumption, that is enough, but it keeps on > > > >> throwing the error > > > >> "No ManagedConnections Available!" every one or two days, > > > >> > > > >> So there could be the problem of > > > >> > > > >> 1. Ofbiz out-of-the-box code leads to the connection leakage > > > >> 2. Customization code leads to the connection leakage. > > > >> > > > >> Obviously we thought the problem is in our customized code, and > > > >> SQLProcessor > > > >> is the only part where we use the connections directly. so that's > > > >> why I am > > > >> asking the question in the first mail. > > > >> > > > >> But it seems this is not the problem. > > > >> > > > >> Hope somebody can share more information about this "No > > > >> ManagedConnections > > > >> Available!" information, thanks. > > > >> > > > >> Thanks. > > > >> > > > >> Regards, > > > >> Liu Xiangqian > > > >> > > > >> Wizitsoft Information Technology Ltd. > > > >> www.wizitsoft.com | (86) 010-62670653 ext 614 > > > >> > > > >> > > > >> On Fri, Sep 11, 2009 at 10:58 AM, Scott Gray < > scott.g...@hotwaxmedia.com > > > >>> wrote: > > > >> > > > >>> Hi Liu, > > > >>> > > > >>> Yes you should call close() on the SQLProcessor and no closing the > > > >>> connection will not prevent it from being returned to the pool. > > > >>> Whether it > > > >>> will solve your problem or not I don't know. > > > >>> > > > >>> Regards > > > >>> Scott > > > >>> > > > >>> HotWax Media > > > >>> http://www.hotwaxmedia.com > > > >>> > > > >>> On 11/09/2009, at 2:44 PM, Larry.Liu wrote: > > > >>> > > > >>> Hi, > > > >>>> > > > >>>> We have created SQLProcessor in our code manually and also invoke > > > >>>> > > > >>>> process.close() > > > >>>> > > > >>>> after execute the sql query or update, and we are assumpting this > > > >>>> caused > > > >>>> error of > > > >>>> > > > >>>> No ManagedConnections Available > > > >>>> > > > >>>> I have looked into the file EntitySQLProcessor.bsh, that's the > > > >>>> file for > > > >>>> webtools module SQL Processor page, I didn't see any closure of the > > > >>>> SQLProcessor. > > > >>>> > > > >>>> So here are two questions, > > > >>>> > > > >>>> 1. Do we need to manually close the SQLProcessor? > > > >>>> > > > >>>> 2. Close one SQLProcessor instance will cause the connection > > > >>>> attached to > > > >>>> this process being closed and make available connections in the > > > >>>> pool fewer > > > >>>> and fewer? > > > >>>> > > > >>>> Thanks. > > > >>>> > > > >>>> Regards, > > > >>>> Liu Xiangqian > > > >>>> > > > >>>> Wizitsoft Information Technology Ltd. > > > >>>> www.wizitsoft.com | (86) 010-62670653 ext 614 > > > >>>> > > > >>> > > > >>> > > > > > > > >