0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SpringBootアプリケーションにおけるトランザクションロールバック失敗の調査と解決

Last updated at Posted at 2023-07-19

発生した問題

トランザクション管理において環境依存の問題が発生:

  • 検証環境: トランザクションが正常にロールバック
  • 本番環境: ロールバックが失敗し、意図せずコミットされる

システム環境

共通構成

  • SpringBoot 2.7
  • データベース: Azure SQL Database

環境別構成

項目 検証環境 本番環境
アプリケーションサーバ Tomcat 9 Open Liberty 22.0

問題の調査

調査プロセス

  1. 開発環境(Tomcat)での動作確認
    • 問題の再現せず
  2. 環境差分の特定
    • アプリケーションサーバの違いに着目
  3. 開発環境でのOpen Liberty検証
    • 問題の再現に成功

エラー内容

スタックトレース
org.springframework.transaction.TransactionSystemException: UOWManager transaction processing failed; 
nested exception is com.ibm.wsspi.uow.UOWException: java.lang.LinkageError:
com/ibm/websphere/uow/UOWSynchronizationRegistry.registerInterposedSynchronization

原因分析

トランザクションマネージャーの競合が発生:

  • Spring組み込みトランザクション管理機能
  • Open LibertyのJTAトランザクション管理機能
  • 両者が同時に有効化され、競合状態に

解決策

設定変更

JVM引数に以下を追加し、SpringBootのJTA自動構成を無効化:

# jvm.options
-Dspring.jta.enabled=false

技術解説

Java Transaction API (JTA)

  • Jakarta EE(旧Java EE)の標準API
  • 分散トランザクション処理を実現するためのインターフェース
  • 主な機能:
    • トランザクションの開始・コミット・ロールバック
    • 複数のXAリソース間でのトランザクション調整
    • トランザクション境界の管理

SpringBootのトランザクション管理

  • 宣言的トランザクション管理(@Transactional
  • プログラマティックトランザクション管理(TransactionTemplate
  • JTAとの統合オプション

教訓

  1. 環境差異の重要性

    • ミドルウェアの違いによる影響を事前確認
    • 各環境での動作検証の必要性
  2. トランザクション管理の設計ポイント

    • フレームワークの重複を避ける
    • 明示的な設定の重要性
    • 環境依存の考慮

参考

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?