[CONTAINER-135] S2JDBC を WAS6 で使用すると,トランザクションのコミット時に NullPointerException が発生する問題を修正しました.[Seasar-user:11924] Created: 2007-12-06  Updated: 2007-12-06  Resolved: 2007-12-06

Status: Resolved
Project: S2Container
Component/s: S2-Tiger
Affects Version/s: 2.4.18-rc3
Fix Version/s: 2.4.18-rc4

Type: Bug Priority: Major
Reporter: koichik Assignee: koichik
Resolution: Fixed Votes: 0
Labels: None


 Description   

S2JDBC を WAS6 で使用すると,トランザクションのコミット時に NullPointerException が発生する.[Seasar-user:11924]
http://ml.seasar.org/archives/seasar-user/2007-December/011923.html



 Comments   
Comment by koichik [ 2007-12-06 ]

対応しました.
http://svn.seasar.org/browse/?view=rev&root=s2container&revision=3285

報告者の確認も取れました.[Seasar-user:11955]
http://ml.seasar.org/archives/seasar-user/2007-December/011954.html

Comment by koichik [ 2007-12-06 ]

ダメだったので再オープン.

そもそも JTA の仕様に勘違いがあった模様.
Synchronization#afterCompletion() は,トランザクションコンテキストの外側で呼び出される.
この意味は,トランザクションステータスが STATUS_ACTIVE でないということではなく,そもそもカレントスレッドにトランザクションが関連づけられていない状態で呼び出されるということらしい.
http://java.sun.com/javaee/5/docs/api/javax/transaction/TransactionSynchronizationRegistry.html#registerInterposedSynchronization(javax.transaction.Synchronization)

The afterCompletion callback will be invoked in an undefined context.

そのため,TransactionSynchronizationRegistry#getResource() も null を返す.
S2JDBC は afterCompletion() の中で getResource() を呼び出していたため,S2JTA 以外の環境で動作しなかった.

Comment by koichik [ 2007-12-06 ]

対応しました.
http://svn.seasar.org/browse/?view=rev&root=s2container&revision=3283

報告者の確認が取れてないけどダメだったら再オープンするということで.

Generated at Sat Apr 20 01:48:03 JST 2024 using Jira 9.15.0#9150000-sha1:9ead8528714127d8cfabf2446010d7e62c0a195c.