Я установил 'max_prepared_transactions' на 20 в локальном postgres.config и все же сбоях транзакции со следующей ошибочной трассировкой (но только на Linux). С тех пор в Windows тот же код работает беспрепятственно, я блуждаю, если это не выпуск разрешения. Каково было бы решение? Спасибо Peter
372300 [Atomikos:7] WARN atomikos - XA resource 'XADBMS': rollback for XID '3137332E3230332E3132362E3139302E746D30303030313030303037:3137332E3230332E3132362E3139302E746D31' raised -3: the XA resource detected an internal error org.postgresql.xa.PGXAException: Error rolling back prepared transaction at org.postgresql.xa.PGXAConnection.rollback(PGXAConnection.java:357) at com.atomikos.datasource.xa.XAResourceTransaction.rollback(XAResourceTransaction.java:873) at com.atomikos.icatch.imp.RollbackMessage.send(RollbackMessage.java:90) at com.atomikos.icatch.imp.PropagationMessage.submit(PropagationMessage.java:86) at com.atomikos.icatch.imp.Propagator$PropagatorThread.run(Propagator.java:62) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:651) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:676) at java.lang.Thread.run(Thread.java:595) Caused by: org.postgresql.util.PSQLException: ERROR: prepared transaction with identifier "1096044365_MTczLjIwMy4xMjYuMTkwLnRtMDAwMDEwMDAwNw==_MTczLjIwMy4xMjYuMTkwLnRtMQ==" does not exist at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:299) at org.postgresql.xa.PGXAConnection.rollback(PGXAConnection.java:347)
Отредактировано, чтобы помочь другим, кто ищет понимание тех же симптомов
Ошибка указывает на то, что вы все еще превышаете свой предел max_prepared_transactions
.
Убедитесь, что файл конфигурации, который вы отредактировали, является тем, который используется, и что вы сказали postgresql перезагрузить его конфигурацию, чтобы забрать ваши отредактированные max_prepared_transactions
.
Вы можете запросить базу данных, чтобы узнать, что она использует для этой настройки с помощью SQL:
SHOW max_prepared_transactions;
Исходный ответ следует за (на основе предположения, что max_prepared_transactions
был установлен правильно):
Вы вообще используете setAutoCommit ()? Возможно, вы столкнулись с этой недавно обнаруженной ошибкой:
http://archives.postgresql.org/pgsql-jdbc/2010-03/msg00013.php
В этом другом посте показаны некоторые небольшие повторяемые тесты подготовки соединений XA, которые вы можете посмотреть, делаете ли вы что-то подобное:
http://archives.postgresql.org/pgsql-jdbc/2009-01/msg00025.php