ฉันเห็น stacktrace (ตัด) ต่อไปนี้ในไฟล์ server.log ของ 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
การตรวจสอบไฟล์บันทึก Postgres จะเผยข้อความต่อไปนี้:
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
ฉันใช้ Infinispan มาพร้อมกับ JBoss 7.1.1 Final ซึ่งเป็น 5.1.2 สุดท้าย
ดังนั้นนี่คือสิ่งที่ฉันคิดว่าจะเกิดขึ้น:
- Infinispan พยายามเรียกใช้
SELECT count(*)...
คำสั่งเพื่อดูว่ามีบันทึกใด ๆ ในISPN_MIXED_BINARY_TABLE_configCache
; - Postgres ด้วยเหตุผลบางอย่างไม่ชอบคำสั่งนี้
- Infinispan เพิกเฉยต่อสิ่งนี้และพุ่งไปข้างหน้าพร้อมกับ
CREATE TABLE
แถลงการณ์ - postgres barfs เพราะมันยังคิดว่าเป็นธุรกรรมเดียวกันซึ่ง Infinispan ไม่สามารถย้อนกลับและธุรกรรมนี้ถูก shafted จาก
SELECT count(*)...
คำสั่งแรก
ข้อผิดพลาดนี้หมายถึงอะไรและมีแนวคิดใดที่จะแก้ไขได้
PSQLException: current transaction is aborted...
(25P02
) และอาจจะยังหรือJPA
Hibernate
ในที่สุดมันก็เป็นเพราะเรา (ดี!) Logbackการใช้งานเลี้ยงกับtoString()
วัตถุ DAO -overloaded ที่ก่อให้เกิดข้อผิดพลาดและถูกกลืนกินอย่าง ( แต่ไม่มีใครสังเกตเห็น accidentially โดยฉัน): การผลิตlog.info( "bla bla: {}", obj )
bla bla: [FAILED toString()]
เปลี่ยนเป็นlog.info( "bla bla: {}", String.valueOf( obj )
ทำให้ปลอดภัย แต่ไม่กลืนและทำให้ธุรกรรมเปิดไม่สำเร็จในการสอบถามที่ไม่เกี่ยวข้อง