Unable to perform transactions on flat file.
kulbhushanc Mar 6, 2017 9:34 AMHi,
I have created Xa-DataSource for sftp file using com.hxtt.sql.HxttXADataSource driver class.
I am using below program to perform transaction on file.
public static void executeSqlUpdate(String sql, List<String> values) throws Exception { boolean isRollBack = false; if (sql == null) return; Connection connection = getDriverConnection(); connection.setAutoCommit(false); Statement statement = connection.createStatement(); for (String value : values) { String insertQuery = sql + "values(" + value + ")"; try { statement.executeUpdate(insertQuery); } catch (Exception ex) { ex.printStackTrace(); } } try { if (isRollBack) { connection.rollback(); } else { connection.commit(); } } catch (Exception ex) { ex.printStackTrace(); connection.rollback(); } statement.close(); connection.close(); System.out.println(" "); }
When I am running the above program multiple times, I am getting results in below order:
1st Time : Success
2nd time : Exception at 'statement.executeUpdate(insertQuery)';
3rd Time : Success
4th time : Exception at 'statement.executeUpdate(insertQuery)';
5th Time : Success
6th time : Exception at 'statement.executeUpdate(insertQuery)';
7th Time : Success
8th time : Exception at 'statement.executeUpdate(insertQuery)';
.
.
. so on.....
Exception :
org.teiid.jdbc.TeiidSQLException: TEIID30504 Remote org.teiid.core.TeiidProcessingException: TEIID30504 DelFileHeaderTrueSftpXa: 0 TEIID11013:TEIID11004 Error executing statement(s): [Prepared Values: ['org.teiid.core.types.ClobImpl@e001754', 'org.teiid.core.types.ClobImpl@6cf1cf34'] SQL: INSERT INTO "marketData" ("id", "Name") VALUES (?, ?)] at org.teiid.jdbc.TeiidSQLException.create(TeiidSQLException.java:135) at org.teiid.jdbc.TeiidSQLException.create(TeiidSQLException.java:71) at org.teiid.jdbc.StatementImpl.postReceiveResults(StatementImpl.java:723) at org.teiid.jdbc.StatementImpl.access$100(StatementImpl.java:65) at org.teiid.jdbc.StatementImpl$2.onCompletion(StatementImpl.java:561) at org.teiid.client.util.ResultsFuture.done(ResultsFuture.java:135) at org.teiid.client.util.ResultsFuture.access$200(ResultsFuture.java:40) at org.teiid.client.util.ResultsFuture$1.receiveResults(ResultsFuture.java:79) at org.teiid.net.socket.SocketServerInstanceImpl.receivedMessage(SocketServerInstanceImpl.java:285) at org.teiid.net.socket.SocketServerInstanceImpl.read(SocketServerInstanceImpl.java:323) at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.teiid.net.socket.SocketServerConnectionFactory$ShutdownHandler.invoke(SocketServerConnectionFactory.java:98) at com.sun.proxy.$Proxy1.read(Unknown Source) at org.teiid.net.socket.SocketServerInstanceImpl$RemoteInvocationHandler$1.get(SocketServerInstanceImpl.java:422) at org.teiid.jdbc.StatementImpl.executeSql(StatementImpl.java:570) at org.teiid.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1091) at org.teiid.jdbc.StatementImpl.executeUpdate(StatementImpl.java:360) Caused by: org.teiid.core.TeiidProcessingException: TEIID30504 Remote org.teiid.core.TeiidProcessingException: TEIID30504 DelFileHeaderTrueSftpXa: 0 TEIID11013:TEIID11004 Error executing statement(s): [Prepared Values: ['org.teiid.core.types.ClobImpl@e001754', 'org.teiid.core.types.ClobImpl@6cf1cf34'] SQL: INSERT INTO "marketData" ("id", "Name") VALUES (?, ?)] at org.teiid.dqp.internal.process.DataTierTupleSource.exceptionOccurred(DataTierTupleSource.java:401) at org.teiid.dqp.internal.process.DataTierTupleSource.nextTuple(DataTierTupleSource.java:161) at org.teiid.query.processor.relational.AccessNode.nextBatchDirect(AccessNode.java:392) at org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:282) at org.teiid.query.processor.relational.RelationalPlan.nextBatch(RelationalPlan.java:145) at org.teiid.query.processor.QueryProcessor.nextBatchDirect(QueryProcessor.java:151) at org.teiid.query.processor.QueryProcessor.nextBatch(QueryProcessor.java:114) at org.teiid.query.processor.BatchCollector.collectTuples(BatchCollector.java:164) at org.teiid.query.processor.BatchCollector.collectTuples(BatchCollector.java:146) at org.teiid.dqp.internal.process.RequestWorkItem.processMore(RequestWorkItem.java:477) at org.teiid.dqp.internal.process.RequestWorkItem.process(RequestWorkItem.java:349) at org.teiid.dqp.internal.process.AbstractWorkItem.run(AbstractWorkItem.java:51) at org.teiid.dqp.internal.process.RequestWorkItem.run(RequestWorkItem.java:275) at org.teiid.dqp.internal.process.DQPWorkContext.runInContext(DQPWorkContext.java:282) at org.teiid.dqp.internal.process.ThreadReuseExecutor$RunnableWrapper.run(ThreadReuseExecutor.java:119) at org.teiid.dqp.internal.process.ThreadReuseExecutor$3.run(ThreadReuseExecutor.java:210) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: org.teiid.core.TeiidException: 0 Remote org.teiid.translator.jdbc.JDBCExecutionException: 0 TEIID11013:TEIID11004 Error executing statement(s): [Prepared Values: ['org.teiid.core.types.ClobImpl@e001754', 'org.teiid.core.types.ClobImpl@6cf1cf34'] SQL: INSERT INTO "marketData" ("id", "Name") VALUES (?, ?)] at org.teiid.translator.jdbc.JDBCUpdateExecution.executeTranslatedCommand(JDBCUpdateExecution.java:330) at org.teiid.translator.jdbc.JDBCUpdateExecution.execute(JDBCUpdateExecution.java:86) at org.teiid.dqp.internal.datamgr.ConnectorWorkItem$1.execute(ConnectorWorkItem.java:405) at org.teiid.dqp.internal.datamgr.ConnectorWorkItem.execute(ConnectorWorkItem.java:367) at sun.reflect.GeneratedMethodAccessor90.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.teiid.dqp.internal.datamgr.ConnectorManager$1.invoke(ConnectorManager.java:220) at com.sun.proxy.$Proxy27.execute(Unknown Source) at org.teiid.dqp.internal.process.DataTierTupleSource.getResults(DataTierTupleSource.java:306) at org.teiid.dqp.internal.process.DataTierTupleSource.nextTuple(DataTierTupleSource.java:142) ... 17 more Caused by: java.sql.SQLException: Remote java.sql.SQLException: IJ031070: Transaction cannot proceed: STATUS_MARKED_ROLLBACK at org.jboss.jca.adapters.jdbc.WrapperDataSource.checkTransactionActive(WrapperDataSource.java:245) at org.jboss.jca.adapters.jdbc.WrappedConnection.checkTransactionActive(WrappedConnection.java:1928) at org.jboss.jca.adapters.jdbc.WrappedConnection.checkStatus(WrappedConnection.java:1943) at org.jboss.jca.adapters.jdbc.WrappedConnection.checkTransaction(WrappedConnection.java:1917) at org.jboss.jca.adapters.jdbc.WrappedConnection.prepareStatement(WrappedConnection.java:447) at org.teiid.translator.jdbc.JDBCBaseExecution.getPreparedStatement(JDBCBaseExecution.java:196) at org.teiid.translator.jdbc.JDBCUpdateExecution.executeTranslatedCommand(JDBCUpdateExecution.java:260) ... 27 more
The same program I have tried with Simple JDBC to test whether the problem with file driver or not but It is running successfully each time with Simple JDBC program.
I am wondering why it is throwing exception when I am running it through Teiid.
Thanks,
Kulbhushan Chaskar