Thanks for the info and the fix.  I will be running the test you sent later
today.

Can you (or someone) explain a little more about HA retrying the failed
transaction?  It is my understanding the HA will fail over on communication
exceptions but I haven't heard anything about retrying a transaction under
any circumstances.  If you're referring to failover then that can't be
happening here because there is only 1 server started during this test.  If
there is another mechanism to retry a request then can someone elaborate.
Is this configurable?  How many times will it retry?  What are the
conditions for a retry?

Thanks,
Matt Cleveland

> And last. XAException during transaction commit should be propagated
> back to the client unless the transaction was successfully retried by HA
> configuration. I am not too familiar with JBoss HA, but after quick look
> into the code I believe that HA invoker does retry failed transaction.
>
> Matt Cleveland wrote:
> > Perhaps I've missed something here.  I've been so busy watching my log
files
> > that I did not recognize that the client is not receiving this error.
In
> > fact it is only reported as a warning.  Still it's pretty scary to see
these
> > flying by in the log file.  It leaves you wondering if the transaction
> > committed or rolled back.  From the stack trace I believe that the
> > transaction rolled back and this is still an Oracle concurrency bug, but
if
> > that's not the case I wish the log message told me that.
> >
> > Thanks,
> > Matt Cleveland
> >
> >
> >>>>2003-01-21 21:42:09,141 WARN  [org.jboss.tm.TransactionImpl]
> >>>>XAException: tx=Tra
> >>>>nsactionImpl:XidImpl [FormatId=257, GlobalId=malt//1809, BranchQual=]
> >>>>errorCode=
> >>>>XAER_RMERR
> >>>>oracle.jdbc.xa.OracleXAException
> >>>>        at
> >>>>oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1157
> >>>>)
> >>>>        at
> >>>>oracle.jdbc.xa.client.OracleXAResource.commit(OracleXAResource.java:5
> >>>>90)
> >>>>        at
> >>>>org.jboss.resource.adapter.jdbc.xa.XAManagedConnection.commit(XAManag
> >>>>edConnection.java:140)
> >>>>        at
> >>>>org.jboss.tm.TransactionImpl.commitResources(TransactionImpl.java:142
> >>>>0)
> >>>>        at
> >
> > org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:349)
> >
> >>>>        at
> >>>>org.jboss.ejb.plugins.TxInterceptorCMT.endTransaction(TxInterceptorCM
> >>>>T.java:361)
> >>>>        at
> >>>>org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxIntercep
> >>>>torCMT.java:247)
> >>>>        at
> >>>>org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:1
> >>>>01)
> >>>>        at
> >>>>org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.
> >>>>java:130)
> >>>>        at
> >>>>org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:204)
> >>>>        at
> >>>>org.jboss.ejb.plugins.CleanShutdownInterceptor.invoke(CleanShutdownIn
> >>>>terceptor.java:265)
> >>>>        at
> >>>>org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFacto
> >>>>ryFinderInterceptor.java:154)
> >>>>        at
> >>>>org.jboss.ejb.StatelessSessionContainer.invoke(StatelessSessionContai
> >>>>ner.java:303)
> >>>>        at org.jboss.ejb.Container.invoke(Container.java:680)
> >>>>        at
> >>>>org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:549)
> >>>>        at
> >>>>org.jboss.invocation.jrmp.server.JRMPInvokerHA.invoke(JRMPInvokerHA.j
> >>>>ava:163)
> >>>>        at java.lang.reflect.Method.invoke(Native Method)
> >>>>        at
> >>>>sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:236)
> >>>>        at sun.rmi.transport.Transport$1.run(Transport.java:147)
> >>>>        at java.security.AccessController.doPrivileged(Native Method)
> >>>>        at sun.rmi.transport.Transport.serviceCall(Transport.java:143)
> >>>>        at
> >>>>sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:4
> >>>>60)
> >>>>        at
> >>>>sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport
> >>>>.java:701)
> >>>>        at java.lang.Thread.run(Thread.java:479)
> >>>>
> >>>>oracle-xa-ds
> >>>>------------------
> >>>><?xml version="1.0" encoding="UTF-8"?>
> >>>>
> >>>><datasources>
> >>>>  <xa-datasource>
> >>>>    <jndi-name>XaOracleDS</jndi-name>
> >>>>    <track-connection-by-tx>true</track-connection-by-tx>
> >>>>
> >>>>
> >
<managedconnectionfactory-class>org.jboss.resource.adapter.jdbc.xa.oracle.XA
> >
> >>OracleManagedConnectionFactory</managedconnectionfactory-class>
> >>
> >>>>
> >
<!--xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasou
> >
> >>rce-class-->
> >>
> >>>>    <xa-datasource-property
> >>>>name="URL">jdbc:oracle:thin@server:port:sid</xa-datasource-property>
> >>>>    <xa-datasource-property name="User">scott</xa-datasource-property>
> >>>>    <xa-datasource-property
> >>
> >>name="Password">tiger</xa-datasource-property>
> >>
> >>>>    <min-pool-size>0</min-pool-size>
> >>>>    <max-pool-size>50</max-pool-size>
> >>>>    <blocking-timeout-millis>20000</blocking-timeout-millis>
> >>>>    <idle-timeout-minutes>15</idle-timeout-minutes>
> >>>>  </xa-datasource>
> >>>></datasources>
> >>>>
> >>>>Thanks,
> >>>>Matt Cleveland
> >>>
> >>>--
> >>>Igor Fedorenko
> >>>Think smart. Think automated. Think Dynamics.
> >>>www.thinkdynamics.com
> >>>
> >>>
> >>>
> >>>-------------------------------------------------------
> >>>This SF.net email is sponsored by: Scholarships for Techies!
> >>>Can't afford IT training? All 2003 ictp students receive scholarships.
> >>>Get hands-on training in Microsoft, Cisco, Sun, Linux/UNIX, and more.
> >>>www.ictp.com/training/sourceforge.asp
> >>>_______________________________________________
> >>>Jboss-development mailing list
> >>>[EMAIL PROTECTED]
> >>>https://lists.sourceforge.net/lists/listinfo/jboss-development
> >>
> >>
> >>
> >>
> >>-------------------------------------------------------
> >>This SF.net email is sponsored by: Scholarships for Techies!
> >>Can't afford IT training? All 2003 ictp students receive scholarships.
> >>Get hands-on training in Microsoft, Cisco, Sun, Linux/UNIX, and more.
> >>www.ictp.com/training/sourceforge.asp
> >>_______________________________________________
> >>Jboss-development mailing list
> >>[EMAIL PROTECTED]
> >>https://lists.sourceforge.net/lists/listinfo/jboss-development
> >>
> >
> >
> >
> >
> >
> > -------------------------------------------------------
> > This SF.net email is sponsored by: Scholarships for Techies!
> > Can't afford IT training? All 2003 ictp students receive scholarships.
> > Get hands-on training in Microsoft, Cisco, Sun, Linux/UNIX, and more.
> > www.ictp.com/training/sourceforge.asp
> > _______________________________________________
> > Jboss-development mailing list
> > [EMAIL PROTECTED]
> > https://lists.sourceforge.net/lists/listinfo/jboss-development
>
> --
> Igor Fedorenko
> Think smart. Think automated. Think Dynamics.
> www.thinkdynamics.com
>


----------------------------------------------------------------------------
----


> package test;
>
> import java.sql.Connection;
> import java.sql.Statement;
>
> import javax.sql.XAConnection;
> import javax.sql.XADataSource;
> import javax.transaction.xa.XAException;
> import javax.transaction.xa.XAResource;
> import javax.transaction.xa.Xid;
>
> import oracle.jdbc.xa.OracleXAException;
> import oracle.jdbc.xa.OracleXid;
> import oracle.jdbc.xa.client.OracleXADataSource;
>
> /**
>  * Stress test. Works fine with both Oracle 8.1.7.3 and 9.2.0.1
>  *
>  * @author ifedorenko
>  */
> public class StressTestXADatasource implements Runnable {
>
>     static int gd = 1000;
>     static XADataSource ds = null;
>     static Object mutex = new Object();
>     static volatile boolean run = true;
>
>     public void run() {
>         try {
>             XAConnection xaconn;
>             synchronized (mutex) {
>                 xaconn = ds.getXAConnection();
>             }
>             Connection conn;
>             conn = xaconn.getConnection();
>             XAResource xares = xaconn.getXAResource();
>             for (int i = 0; ; i++) {
>                 if ((i % 10) == 0) {
>                     System.out.println(Thread.currentThread().getName() +
": " + i);
>                 }
>                 Xid xid = createXid();
>                 xares.start(xid, XAResource.TMNOFLAGS);
>                 Statement stmt = conn.createStatement();
>                 try {
>                     stmt.executeUpdate("insert into test(f1) values
(to_char(sysdate, 'dd:mm:yyyy'))");
>                 } finally {
>                     stmt.close();
>                 }
>                 xares.end(xid, XAResource.TMSUCCESS);
>                 xares.prepare(xid);
>                 xares.commit(xid, false); // two-phase commit
>             }
>         } catch (Exception e) {
>             dump(e);
>         }
>     }
>
>     public static void main(String[] args) throws Exception {
>         OracleXADataSource _ds = new OracleXADataSource();
> //        _ds.setURL("jdbc:oracle:oci8:@tc");
>         _ds.setURL("jdbc:oracle:thin:@oahu:1521:tc");
> //        _ds.setURL("jdbc:oracle:thin:@10.1.1.13:1521:tc9i");
>         _ds.setUser("scott");
>         _ds.setPassword("tiger");
>         ds = _ds;
>
>         int max = 50;
>         for (int i = 0; i < max; i++) {
>             new Thread(new StressTestXADatasource()).start();
>         }
>     }
>
>
>     static synchronized Xid createXid() throws XAException {
>         byte[] _gtrid = Integer.toString(gd++).getBytes();
>         byte[] _bqual = Integer.toString(1).getBytes();
>         byte[] gtrid = new byte[64];
>         byte[] bqual = new byte[64];
>         System.arraycopy(_gtrid, 0, gtrid, 0, _gtrid.length);
>         System.arraycopy(_bqual, 0, bqual, 0, _bqual.length);
>         Xid xid = new OracleXid(0x1234, gtrid, bqual);
>         return xid;
>     }
>     static void dump(Throwable e) {
>         e.printStackTrace();
>         if (e instanceof OracleXAException) {
>             OracleXAException oe = (OracleXAException) e;
>             System.err.println(
>                 "xa error: "
>                     + oe.getXAError()
>                     + " ("
>                     + oe.getXAErrorMessage(oe.getXAError())
>                     + ")");
>             System.err.println("oracle error: " + oe.getOracleError());
>             System.err.println("oracle sql error: " +
oe.getOracleSQLError());
>         } else if (e instanceof XAException) {
>             XAException xe = (XAException) e;
>             System.err.println("xa error: " + xe.errorCode);
>         }
>     }
> }
>




-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to