Je vois la trace de pile suivante (tronquée) dans le fichier server.log de JBoss 7.1.1 Final :
Caused by: org.postgresql.util.PSQLException:
ERROR: current transaction is aborted, commands ignored until end of
transaction block
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:302)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.6.0_23]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [rt.jar:1.6.0_23]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [rt.jar:1.6.0_23]
at java.lang.reflect.Method.invoke(Method.java:597) [rt.jar:1.6.0_23]
at org.postgresql.ds.jdbc23.AbstractJdbc23PooledConnection$StatementHandler.invoke(AbstractJdbc23PooledConnection.java:455)
at $Proxy49.executeUpdate(Unknown Source) at org.jboss.jca.adapters.jdbc.WrappedStatement.executeUpdate(WrappedStatement.java:371)
at org.infinispan.loaders.jdbc.TableManipulation.executeUpdateSql(TableManipulation.java:154) [infinispan-cachestore-jdbc-5.1.2.FINAL.jar:5.1.2.FINAL]
... 154 more
L'inspection du fichier journal de Postgres révèle les déclarations suivantes :
STATEMENT: SELECT count(*) FROM ISPN_MIXED_BINARY_TABLE_configCache
ERROR: current transaction is aborted, commands ignored until end of transaction block
STATEMENT: CREATE TABLE ISPN_MIXED_BINARY_TABLE_configCache(ID_COLUMN VARCHAR(255) NOT NULL, DATA_COLUMN BYTEA, TIMESTAMP_COLUMN BIGINT, PRIMARY KEY (ID_COLUMN))
ERROR: relation "ispn_mixed_binary_table_configcache" does not exist at character 22
J'utilise l'Infinispan livré avec JBoss 7.1.1 Final, qui est 5.1.2.Final.
Voici donc ce que je pense qu'il se passe :
- Infinispan tente d'exécuter le
SELECT count(*)...
afin de voir s'il y a des enregistrements dans le fichierISPN_MIXED_BINARY_TABLE_configCache
; - Postgres, pour une raison quelconque, n'aime pas cette déclaration.
- Infinispan l'ignore et continue avec la méthode
CREATE TABLE
déclaration. - Postgres se dégonfle parce qu'il pense toujours qu'il s'agit de la même transaction, qu'Infinispan n'a pas réussi à annuler, et que cette transaction s'est fait avoir dès le départ.
SELECT count(*)...
déclaration.
Que signifie cette erreur et comment la contourner ?
0 votes
Si vous êtes venu ici comme moi, en cherchant ce qui précède.
PSQLException: current transaction is aborted...
(25P02
) et peut-être aussiJPA
ouHibernate
. Finalement, c'est grâce à notre (belle !) Logback usage alimenté par untoString()
-L'objet DAO surchargé qui a causé l'erreur et a été gentiment avalé (mais accidentellement inaperçu par moi) :log.info( "bla bla: {}", obj )
produitbla bla: [FAILED toString()]
. en le changeant enlog.info( "bla bla: {}", String.valueOf( obj )
la rendait nulle, mais ne l'avalait pas et laissait ainsi la transaction ouverte échouer sur une requête sans rapport.0 votes
J'ai eu le même type d'erreur. J'ai dû libérer la connexion avant le sql. Mon code était connection.commit()
0 votes
J'ai répondu ici stackoverflow.com/a/65172183/3323007 et ça marche !
1 votes
Il y a deux façons de résoudre ce problème. 1) exécutez ROLLBACK ; cela réglera le problème avec l'onglet actuel, 2) ouvrez un nouvel onglet et exécutez la même commande. Essayez d'ajouter un try catch dans la requête en cours d'exécution.