java - TEIID30538 java.lang.IllegalStateException: WFTXN0007: 事务已与当前线程关联
问题描述
我正在使用 teiid 版本 15.0.0。但有时会发生什么,当我运行程序时会引发异常。
org.teiid.jdbc.TeiidSQLException: TEIID30538 java.lang.IllegalStateException: WFTXN0007: A transaction is already associated with the current thread
at org.teiid.jdbc.TeiidSQLException.create(TeiidSQLException.java:131)
at org.teiid.jdbc.TeiidSQLException.create(TeiidSQLException.java:67)
at org.teiid.jdbc.StatementImpl.postReceiveResults(StatementImpl.java:786)
at org.teiid.jdbc.StatementImpl.access$100(StatementImpl.java:62)
at org.teiid.jdbc.StatementImpl$2.onCompletion(StatementImpl.java:584)
at org.teiid.client.util.ResultsFuture.done(ResultsFuture.java:131)
at org.teiid.client.util.ResultsFuture.access$200(ResultsFuture.java:36)
at org.teiid.client.util.ResultsFuture$1.receiveResults(ResultsFuture.java:75)
at org.teiid.net.socket.SocketServerInstanceImpl.receivedMessage(SocketServerInstanceImpl.java:281)
at org.teiid.net.socket.SocketServerInstanceImpl.read(SocketServerInstanceImpl.java:333)
at org.teiid.net.socket.SocketServerInstanceImpl$RemoteInvocationHandler$1.get(SocketServerInstanceImpl.java:423)
at org.teiid.jdbc.StatementImpl.executeSql(StatementImpl.java:593)
at org.teiid.jdbc.PreparedStatementImpl.executeUpdate(PreparedStatementImpl.java:319)
at com.lgc.dsis.data.well.jdbc.DataAccessJDBC.insertInATable(DataAccessJDBC.java:185)
at com.lgc.dsis.data.well.jdbc.DataAccessJDBC.runCRUD(DataAccessJDBC.java:517)
at com.lgc.dsis.data.well.jdbc.DataAccessJDBC.main(DataAccessJDBC.java:593)
Caused by: org.teiid.client.xa.XATransactionException: TEIID30538 java.lang.IllegalStateException: WFTXN0007: A transaction is already associated with the current thread
at org.teiid.dqp.internal.process.TransactionServerImpl.resume(TransactionServerImpl.java:434)
at jdk.internal.reflect.GeneratedMethodAccessor173.invoke(Unknown Source)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:566)
at org.teiid.logging.LogManager$LoggingProxy.invoke(LogManager.java:119)
at com.sun.proxy.$Proxy40.resume(Unknown Source)
at org.teiid.dqp.internal.process.RequestWorkItem.resume(RequestWorkItem.java:451)
at org.teiid.dqp.internal.process.RequestWorkItem.process(RequestWorkItem.java:357)
at org.teiid.dqp.internal.process.AbstractWorkItem.run(AbstractWorkItem.java:43)
at org.teiid.dqp.internal.process.RequestWorkItem.run(RequestWorkItem.java:284)
at org.teiid.dqp.internal.process.DQPWorkContext.runInContext(DQPWorkContext.java:283)
at org.teiid.dqp.internal.process.ThreadReuseExecutor$RunnableWrapper.run(ThreadReuseExecutor.java:124)
at org.teiid.dqp.internal.process.ThreadReuseExecutor$2.run(ThreadReuseExecutor.java:212)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.IllegalStateException: WFTXN0007: A transaction is already associated with the current thread
at org.wildfly.transaction.client.ContextTransactionManager.resume(ContextTransactionManager.java:155)
at org.wildfly.transaction.client.ContextTransactionManager.resume(ContextTransactionManager.java:150)
at org.teiid.dqp.internal.process.TransactionServerImpl.resume(TransactionServerImpl.java:432)
... 15 more
但是每次我运行程序时都不会发生这种情况,这是随机发生的。
发生此问题的代码如下:
public static void main(String[] args) throws InterruptedException {
int counter = 10;
for(int index = 0; index < counter; index++) {
System.out.println("*** Iteration " + (index+1) + " ***");
DataAccessJDBC access = new DataAccessJDBC();
access.runCRUD();
}
private void runCRUD() {
Connection conn = null;
try {
conn = initConnection();
setProjectQuery(conn);
Long start = Instant.now().getEpochSecond();
insertintoTableA(conn);
insertintoTableB(conn);
insertintoTableC(conn);
insertintoTableD(conn);
Long end = Instant.now().getEpochSecond();
System.out.println("Total time in seconds: "+(end-start));
} catch (Exception e) {
e.printStackTrace();
} finally {
closeConnection(conn);
}
}
任何解决此问题的建议/建议,我都尝试使用 teiid 9.0.1 版和 15.0.0 版。
谢谢
解决方案
推荐阅读
- python - python,读取文件名的特定字符
- database - 如何使用codeigniter中的getRecored_row方法从数据库中获取另一列值 - 任何人都可以帮助我
- java - 从 java 中的 System.nanoTime() 计算小时
- c# - 时间:2019-05-10 标签:c#covariance with Interface and BindingList
- php - 异常:StreamIO /var/www/html/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/IO/StreamIO.php 252 中检测到太多读取尝试
- ios - 如何在更新 iOS App 时保存用户详细信息?
- amazon-web-services - 在 Flutter 中从 AWS S3 上传和获取媒体文件
- python - 传递数据框的多列以获取值并将其分配给新列
- python - python api无法使用Json.load()加载Str
- airflow - Airflow 中的类 Cron 调度