Hi, Thanks for the advise. I would like to state here that I have not deliberately put my questions 6 times. It was happened due to my lack of knowledge to post the queries in this forum. Since my query was not appearing on the forum, I thought that I can post directly through mail. Anyways sorry about that.
Coming back to the problem, I am not using any container managed persistence, I am using Bean managed persistence type of stateless session bean only. Hence in this case, I believe the JNDI Datasource should hold good (correct me if I am wrong). Clarification required regarding Stale Connection Exception. I am getting often this stale connection exception when my application is idle for 1 hour and for the very first request for database operation. I tried retrying for the very first db operation in case of stale connection exception. I could able to retry this but since this is happening within a single EJB's transaction, I am getting transaction rollback exception. Is there anyother way in which I can overcome this exception. See my below approach. 1. My Ejb calls my dao. 2. In my DAO, I am starting the sqlmapper transaction 3. trying to invoke a db query 4. comiting in case of successful db execution. 5. In case of error, I am calling the same method from the exception block only once. 6. In my finally block I am ending my sqlmapper transaction. Code is as below. MyEJB (Stateless Session EJB) public String validateUserID(String userID)throws Exception { new MYDAO().validateUser(userID); } MyDAO public String validateUser ( String userID) throws MYDAOException { try { HashMap hshUser = new HashMap(); hshUser.put("userID", userID); getSqlMapper().startTransaction(); String usrStatus = (String) getSqlMapper().queryForObject("validateUserID", hshUser); getSqlMapper().commitTransaction(); return usrStatus; } catch(Exception sqlMapEX) { if(isRetryAllowed()) { retryAllowed = false; return validateUser (userID); } throw new MyDAOException(sqlMapEX); } finally { try { getSqlMapper().endTransaction(); } catch(Exception ex) { MyLogger.logFatal("Error while ending Transaction "+ex.getMessage()); } } } In the above you can see that I am retrying only once. For the second time I am not getting any exception from the method validateDeviceID of MyDAO rather I am getting exception from Ejb container saying that transaction is rolledback. Please clarify what could be wrong. Thanks in advance. Regards Venkat Christopher Lamey wrote: > > First, some etiquette advise is in order. It is considered a faux pas to > send the same message to the list 6 times in a short amount of time. > Posting something more will not get you more or quicker responses. Also, > sending the same message directly to members of the list immediately after > posting to the list itself is not going to give you a boost in help. In > fact, it will probably make people ignore you. > > As to your problem, you currently have your JNDI DataSource setup as a > JDBC > source. Is this true or are you using a container managed DataSource? If > you are using something like a JTA provider through WAS, you will need > something like this: > > <transactionManager type="JTA" > > <property name="UserTransaction" value="java:/comp/UserTransaction"/> > <dataSource type="JNDI"> > <property name="DataSource" value="java:comp/env/jdbc/jpetstore"/> > </dataSource> > </transactionManager> > > Please see page 16 of the iBATIS PDF manual for details. > > Basically you're binding a DataSource into JNDI and you need to configure > the DataSource there, not in iBATIS. So if you're binding a one via DBCP, > you could configure the idle time or a ping query or whatever. > > Cheers, > topher > > On 2/15/08 6:38 AM, "[EMAIL PROTECTED]" > <[EMAIL PROTECTED]> wrote: > >> Hi, >> >> I am using WAS 6.0 Datasource inside my Ibatis sql mapper. The code in >> my sqlmapconfig.xml is as follows. >> >> <transactionManager type="JDBC" commitRequired="true"> >> <dataSource type="JNDI"> >> <property name="DataSource" >> value="jdbc/MyDataSrc" /> >> </dataSource> >> </transactionManager> >> >> I am calling the database operations from my EJB which is stateless and >> Bean Managed. The code inside my EJB is as follows. >> >> EJB:public MySOAPEnvelope processDownload ( MyReqEnvelope >> reqEnvelope)throws MySessionBeanException >> { >> try >> { >> MySQLConfig.getInstance().getSqlMapper().startTransaction(); >> >> //Invoke business logic classes MyBlogicClass >> MySQLConfig.getInstance().getSqlMapper().commitTransaction(); >> return object; >> } >> catch(Exception ex) >> { >> throw new MySessionBeanException(ex.getMessage()); >> } >> finally >> { >> try >> { >> MySQLConfig.getInstance().getSqlMapper().endTransaction(); } >> catch(Exception ex) >> { >> MyLogger.logError (" error while commiting and closing connection >> "+ex); >> } >> } >> >> } >> >> MyBlogicClass calls MyDAO inside this DAO class I am invoking the >> database query which are defined in the IBatis SQLMapper xml files and >> returned back the result to MyBlogicClass. Which inturn return to MyEJB. >> >> >> >> Since I am using IBatis for the first time in my project. I wanted to >> know whether the way in which I am doing is correct with respect >> datasource connection pool handling and other things. The reason for >> which I am asking is, at times I am getting transaction timed out >> exception while executing some queries which normally does not happens. >> Also When I am getting the connection for the very first time and not >> utilising it for long then I am getting the Stale connection exception. >> I think this is somewhat obvious but please let me know if I am doing >> something wrong due to which I am getting this exception. Also is there >> anyway by which we can retry while I am getting this stale connection >> exception. >> >> My Doubts are Clarifications are as follows. >> >> 1. Whether the Datasource settings described in my SQLMapConfig.xml is >> correct or is there any other properties I need to set in the same in >> order to properly commit or rollback and close the connection so that >> the usage Connection Object from the datasource connection pool is >> utilised minimal. >> >> 2. Whether the code which I have put in my ejb is OK. >> >> To conclude, I would like to know whether the problem behind this >> transaction timed out and stale connection exception is due to way in >> which I am handling the connection through IBatis or its due to database >> server or network issue. >> >> For your reference I am giving a sample log messages which I get from >> the IBatis (hoping that you could get some idea about the connection >> usage). >> >> 2008/02/13 12:40:21,156: <DEBUG> {conn-100000} Connection >> 2008/02/13 12:40:21,203: <DEBUG> {conn-100000} Preparing Statement: >> Query A >> 2008/02/13 12:40:25,766: <DEBUG> {conn-100000} Preparing Statement: >> Query B >> 2008/02/13 12:40:43,031: <DEBUG> {conn-100000} Preparing Statement: >> Query C >> 2008/02/13 12:41:19,078: <DEBUG> {conn-100007} Connection >> 2008/02/13 12:41:19,094: <DEBUG> {conn-100007} Preparing Statement: >> Query A >> 2008/02/13 12:41:19,812: <DEBUG> {conn-100007} Preparing Statement: >> Query B >> 2008/02/13 12:44:21,516: <DEBUG> {conn-100012} Connection >> 2008/02/13 12:44:21,516: <DEBUG> {conn-100012} Preparing Statement: >> Query A >> 2008/02/13 12:44:21,812: <DEBUG> {conn-100012} Preparing Statement: >> Query B >> 2008/02/13 12:47:15,000: <DEBUG> {conn-100017} Connection >> 2008/02/13 12:47:15,000: <DEBUG> {conn-100017} Preparing Statement: >> Query A >> 2008/02/13 12:47:15,281: <DEBUG> {conn-100017} Preparing Statement: >> Query B >> 2008/02/13 12:55:08,875: <DEBUG> {conn-100000} Connection >> 2008/02/13 12:55:08,891: <DEBUG> {conn-100000} Preparing Statement: >> Query A >> 2008/02/13 12:55:09,406: <DEBUG> {conn-100000} Preparing Statement: >> Query B >> 2008/02/13 12:55:52,047: <DEBUG> {conn-100005} Connection >> 2008/02/13 12:55:52,047: <DEBUG> {conn-100005} Preparing Statement: >> Query A >> 2008/02/13 12:55:52,344: <DEBUG> {conn-100005} Preparing Statement: >> Query B >> 2008/02/13 12:59:46,109: <DEBUG> {conn-100010} Connection >> 2008/02/13 12:59:46,109: <DEBUG> {conn-100010} Preparing Statement: >> Query A >> 2008/02/13 12:59:47,172: <DEBUG> {conn-100010} Preparing Statement: >> Query B >> >> >> >> Awating response at the earliest. >> >> Thanks in advance. >> Venkat >> >> >> The information contained in this electronic message and any attachments >> to >> this message are intended for the exclusive use of the addressee(s) and >> may >> contain proprietary, confidential or privileged information. If you are >> not >> the intended recipient, you should not disseminate, distribute or copy >> this >> e-mail. Please notify the sender immediately and destroy all copies of >> this >> message and any attachments. >> >> WARNING: Computer viruses can be transmitted via email. The recipient >> should >> check this email and any attachments for the presence of viruses. The >> company >> accepts no liability for any damage caused by any virus transmitted by >> this >> email. >> >> www.wipro.com >> > > > ----- Venkat -- View this message in context: http://www.nabble.com/Transaction-Time-Out-and-Stale-Connection-Exception-when-using-IBatis-SQLMapper-tp15496139p15846998.html Sent from the iBATIS - User - Java mailing list archive at Nabble.com.