本番稼動中の既存システムのテーブルを参照する箇所で発生した。
既存システムは、現時点では並行稼動用の”仮対応”の状態であり、本番稼動後の状態となっていない。
そのため、一部のテーブルのカラムが足りない状況となっており、そのテーブルの参照で発生した(通常SQLExceptionがthrowされる)。
Spring 2.0.5
SQLServer 2005
UnexpectedRollbackExceptionはExceptionとしてcatchし、ログで確認することができた。
しかし、Rollbackに至った原因となるSQLExceptionはどこにもthrowされていない?catchされていない?
ログには
【一部のテーブルのカラムが足りない状況でSQLを実行】 "2009-4-11 12:19:19.484","INFO","org.springframework.beans.factory.xml.XmlBeanDefinitionReader","Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]" "2009-4-11 12:19:19.546","INFO","org.springframework.jdbc.support.SQLErrorCodesFactory","SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]" org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only 【UnexpectedRollbackExceptionのStackTrace】
となっている。
本来、SQLServerよりJDBCドライバ経由でSQLExceptionがthrowされるハズだが…
SQLErrorCodesFactoryオブジェクトで、SQLErrorCodesに対する何かの処理で、例外をthrowしていない???
もしくは、UnexpectedRollbackExceptionが発生した段階で、SQLExceptionがcauseにセットされていない???