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.