To ammend my previous email, the the reason you need ?autoReconnect=true
with MySQL is because the server explicitly closes the connection after a
period of inactivity, which causes a problem with pooling, as DBCP will keep
a few connections open depending on your configuration. The working after a
refresh can be explained by DBCP throwing away the connection, and creating
a new one.

On 3/22/07, bca <[EMAIL PROTECTED]> wrote:


Eric:

were you able to get this issue resolved?  if so, what did you do to get
it
resolved?

I am having the same issue as well..

appreciate your help.

thanks  ..


Eric Bauld wrote:
>
> The SQL Map used to be accessed as a single static object but I ended up
> changing it when the connection was closing to try to fix the problem.
> I'm going to leave it the way it is right now to see if the connection
> timeouts are fixed. Once I know they are I will go back to something
> like this
>
> /**
> * Will setup the SqlMapper, if already setup will do nothing
> */
>     public static void setIBATIS(String iBATIS) {
>       if(sqlMap == null){
>               SQLMapper.iBATIS = iBATIS;
>               setup();
>       }
>     }
>
> Thanks a bunch everyone, I hope this thing is fixed now.
>
> Chris Lamey wrote:
>> Hello,
>>
>> For what it's worth, sqlMapClients are thread-safe, so you can
construct
>> one at webapp init time and share it between all servlets.  Creating a
>> new sqlMapClient on every HTTP request is heavyweight and not needed.
>> Also, the way SQLMapper is written, you could have different threads
>> coming in and getting each other sqlMapClients, which wouldn't be a big
>> deal in this case, but is something to note.
>>
>> Cheers,
>> Chris
>>
>> On Fri, 2006-08-25 at 13:18 -0600, Eric Bauld wrote:
>>
>>> Unsure about using DBCP so probably not. I am creating a new instance
of
>>> a SqlMapClient each time a servlet is run.
>>>
>>> iBatis 2.1.7
>>> apache-tomcat 5.5.7
>>> mysql 4.1.11
>>>
>>> The servlets are accessed from a php script and the output is passed
>>> through apache as a excell file. Its not used that often.
>>>
>>> Each servlet executes this
>>> SQLMapper.setIBATIS( sysprops.getProperty( "ibatis" ) );
>>>
>>> And everything that uses ibatis accesses the SqlMapClient does so via
>>> SQLMapper.getSqlMapInstance()
>>>
>>>
>>> And SQLMapper is as follows
>>>
>>>
>>> package rp.broker;
>>>
>>> import java.io.Reader;
>>> import java.sql.SQLException;
>>>
>>>
>>> import com.ibatis.common.resources.Resources;
>>> import com.ibatis.sqlmap.client.SqlMapClient;
>>> import com.ibatis.sqlmap.client.SqlMapClientBuilder;
>>>
>>>
>>>
>>> public class SQLMapper {
>>>     private static SqlMapClient sqlMap;
>>>     private static String iBATIS;
>>>
>>>     private static void setup(){
>>>         try {
>>>
>>>             String resource = SQLMapper.getIBATIS();
>>>             Reader reader = Resources.getResourceAsReader(resource);
>>>             sqlMap = null;
>>>             SQLMapper.sqlMap =
>>> SqlMapClientBuilder.buildSqlMapClient(reader);
>>>         } catch (Exception e) {
>>>             //An error at this point is unrecoverable, so this should
>>> die
>>>             e.printStackTrace();
>>>             throw new RuntimeException(
>>>                 "Error initializing SQLMapper class.Cause : " +e);
>>>         }
>>>     }
>>>
>>>     public static SqlMapClient getSqlMapInstance() throws SQLException
{
>>>
>>>         return sqlMap;
>>>     }
>>>
>>>     public static void close(){
>>>     }
>>>
>>>     public static void setIBATIS(String iBATIS) {
>>>         SQLMapper.iBATIS = iBATIS;
>>>         setup();
>>>     }
>>>     public static String getIBATIS() {
>>>         return iBATIS;
>>>     }
>>> }
>>>
>>> Kris Schneider wrote:
>>>
>>>> On 8/25/06, Eric Bauld <[EMAIL PROTECTED]> wrote:
>>>>
>>>>> Im having a heck of a time finding the right way to fix this.
>>>>> I have a servlet on a tomcat server, it uses ibatis. It works great
as
>>>>> long as it is being used but when it sits overnight, the connection
>>>>> times out and the next person to use it will get an error. But then
it
>>>>> will work for every request thereafter.
>>>>> I get this exception after it has been sitting.
>>>>>
>>>>> java.sql.SQLException: No operations allowed after connection closed
>>>>>
>>>>> Anyone know of a way to test this to see if the connection has
closed
>>>>> ?
>>>>>
>>>> If you're using DBCP for your connection pooling, see this:
>>>>
>>>> http://jakarta.apache.org/commons/dbcp/configuration.html
>>>>
>>>> Specifically the testOnBorrow and validationQuery params.
>>>>
>>>>
>>>>> I could just put a bogus query + error catch to "wake up" the
>>>>> connection, but its not a very proper fix.
>>>>>
>>>>>  - Eric
>>>>>
>
>
>

--
View this message in context:
http://www.nabble.com/Connection-closing-after-timeout-on-tomcat-tf2166355.html#a9621570
Sent from the iBATIS - User - Java mailing list archive at Nabble.com.


Reply via email to