geronimo-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From licht...@bway.net
Subject RE: Tomcat MySQL XA support
Date Mon, 13 Feb 2006 17:16:16 GMT

It's possible that you got yourself an in-doubt transaction.

If you try it again from the mysql shell (i.e. type in your sql statement
yourself) and it says the same thing, then you may have in-doubt
transaction.

>
> Thanks. If I use MysqlDataSource, there is no problem. But my problem is
> how to use MySQL's XA in
> tomcat environment. Who has this example?  I have done a test to check
> MySQL XA's function, but
> the result is failed. So I wonder if MySQL has real XA to operate
> database. Especial how to fix
> "Lock wait timeout exceeded; try restarting transaction" problem ?  Sorry
> I past the previous mail
> in the end for reference,in wich "Lock wait timeout exceeded" occured.
>
> Wang Jun
>
> --- Lin Sun <linsun.unc@gmail.com>дµÀ:
>
>> I have a simple jsp script that can lookup a server-wide datasource.
>> In
>> the jsp, I don't have to specify the driver or make the connection. I
>> only
>> need to perform the lookup (the following code in a try/catch block).
>> The
>> Tranql resource adapter will take the configuration from the database
>> deployment plan and create the database connection pool.   And your
>> application is portable between different databases with minor changes
>> in
>> the database deployment plan and the appropriate resource adapters.
>>
>> Context initContext = new InitialContext();
>> Context envContext  = (Context)initContext.lookup("java:/comp/env");
>> DataSource ds = (DataSource)envContext.lookup("jdbc/DataSource");
>>
>> Hope this helps!
>> Thanks,
>>
>> Lin
>>
>>
>> On Feb 9, 2006, at 5:36 AM, Jack Wang wrote:
>>
>> >
>> > Does MySQL5.0.18 suport XA in Tomcat 5.5 ? I do a XA test in tomcat
>> > with only a jsp file and
>> > necessary jars. The jsp is as:
>> >
>> > ---------------------------------------------
>> > <%
>> > Context ctx = new InitialContext();
>> > com.mysql.jdbc.jdbc2.optional.MysqlXADataSource xads = new
>> > com.mysql.jdbc.jdbc2.optional.MysqlXADataSource();
>> > xads.setServerName("localhost");
>> > xads.setDatabaseName("test");
>> > xads.setPortNumber(3306);
>> > XAConnection xcon = xads.getXAConnection("root","password");
>> > Connection con = xcon.getConnection();
>> >
>> > System.out.println("I get the correct xads and the con=" + con);
>> > System.out.println("Bind xads to InitialContext");
>> >
>> > ctx.bind("myXADB", xads);
>> > MysqlXADataSource mysqlXADataSource = (MysqlXADataSource)ctx.lookup
>> > ("myXADB");
>> >
>> > System.out.println("Get the null MysqlXADataSource from ctx xads="
>> > + mysqlXADataSource );
>> > %>
>> > ---------------------------------------------
>> >
>> >  Why mysqlXADataSource get from the InitialContext is null ?
>> >
>> >  Is this why I can not configure the XADataSource in tomcat in the
>> > previous mail ?
>> >
>> >  I have waste much time in this problem, please help.
>> >
>> >  Thanks.
>> >
>
>
> ---------- previous mail begin ---------------
>>   I hava done a test to use the MySQL XADataSource. For MySQL has no
>> MYSQLXADataSourceFactory
>> class, so I coded one to produce MysqlXADataSource. MysqlXADataSource is
>> configured in tomcat
>> 5.5
>> server.xml. I can get the MysqlXADataSource instance xaDs by which I can
>> get XAConnection and
>> XAResource. I also configured a UserTransaction which was produced by
>> org.objectweb.jotm.UserTransactionFactory. The following is the action's
>> code in a test web
>> application. This action runs correctly the first time, but in the
>> second time, it runs very
>> slow,
>> then reports "Lock wait timeout exceeded; try restarting transaction"
>> error.
>>
>>   The first question is that it seems the action did not update the
>> table testdata's data. Did
>> the
>> UserTransaction ut have some error not participate in the database
>> transaction?
>>
>>   The second question is that I have searched this error, but don't know
>> how to solve it. Please
>> give me some tips. Must I not use MySQL's XA in Kandula ? Thanks.
>>
>>
>> The java code (JOTM example):
>> ========================================================
>> UserTransaction ut = null;
>> try{
>>     Context ctx = new InitialContext();
>>     MysqlXADataSource xaDs =
>> (MysqlXADataSource)ctx.lookup("java:comp/env/jdbc/myXADB");
>>     ut = (UserTransaction)ctx.lookup("java:comp/env/UserTransaction");
>>
>>     XAConnection xCon = xaDs.getXAConnection();
>>     java.sql.Connection conn = xCon.getConnection();
>>
>>     System.out.println("<<< beginning the transaction >>> xa con
= " +
>> conn);
>>     ut.begin();
>>
>>     // JDBC statements
>>     Statement stmt = conn.createStatement();
>>     ResultSet rst =  stmt.executeQuery("select id, foo from testdata");
>>     if(rst.next()) {
>>         foo=rst.getInt(2);
>>     }
>>     System.out.println("foo = "+ foo +" (before completion)");
>>
>>     String sql = "update testdata set foo=" + (++foo) + " where id=1";
>>     stmt.executeUpdate(sql);// <=== The program will wait here, and then
>> report the error
>> message
>> !
>>
>>     ut.commit();
>>     System.out.println("<<< committing the transaction >>>");
>>
>>     conn.close();
>>     System.out.println("<<< done >>>");
>> }catch(Exception e) {
>>     System.out.print("DBTest >> ");
>>     e.printStackTrace();
>>     System.out.println("<<< rolling back the transaction >>>");
>>     try {
>>     	ut.rollback();
>>     	System.out.println("rollback ok.");
>>     }catch(Exception e1){
>>     	System.out.println("rollback Error " + e1);
>>     }
>>     System.out.println("rollback end");
>> }
>> }
>> ========================================================
>>
>>
>> The error message:
>> ========================================================
>> ==> xaDataSource =
>> com.mysql.jdbc.jdbc2.optional.MysqlXADataSource@e2fbeb <==
>> <<< beginning the transaction >>> xa con =
>> com.mysql.jdbc.jdbc2.optional.ConnectionWrapper@170984c
>> foo = 29 (before completion)
>> <<< committing the transaction >>>
>> <<< done >>>
>> <<< beginning the transaction >>> xa con =
>> com.mysql.jdbc.jdbc2.optional.ConnectionWrapper@4d5575
>> foo = 29 (before completion)
>> - set rollback only (tx=bb14:38:0:01777d30dfc9556034...986c02:)
>> DBTest >> java.sql.SQLException: Lock wait timeout exceeded; try
>> restarting transaction
>>         at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
>>         at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2822)
>>         at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1536)
>>         at
>> com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1159)
>>         at
>> com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:684)
>>         at
>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1184)
>>         at
>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1101)
>>         at
>> com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1086)
>>         at
>>
> com.mysql.jdbc.jdbc2.optional.PreparedStatementWrapper.executeUpdate(PreparedStatementWrapper.java:840)
>>         at foo.XADBTest.init(XADBTest.java:92)
>>         at
>> org.apache.jsp.testJotm_jsp._jspService(org.apache.jsp.testJotm_jsp:55)
>>         at
>> org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
>>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
>>         at
>> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
>>         at
>> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
>>         at
>> org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
>>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
>>         at
>>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
>>         at
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>>         at
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
>>         at
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
>>         at
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
>>         at
>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
>>         at
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
>>         at
>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868)
>>         at
>>
> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663)
>>         at
>> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
>>         at
>> org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
>>         at
>> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
>>         at java.lang.Thread.run(Thread.java:595)
>> <<< rolling back the transaction >>>
>> rollback ok.
>> rollback end
> ---------- previous mail end   ---------------
>
>
>
>
>
>
>
>
>
>
> ___________________________________________________________
> ÑÅ»¢1GÃâ·ÑÓÊÏä°Ù·Ö°Ù·ÀÀ¬»øÐÅ
> http://cn.mail.yahoo.com/
>



Mime
View raw message