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
