永続性管理としてopenJPAを使用するSpring3アプリケーションがあります。次のセクションは、STS/Tomcatで正常に機能します。
@Transactional
createBalance(){
.....
Balance balance = new SummaryBalance();
balance.setName(name);
balance.setCurrency(currency);
balance.setClosingTimestamp(closingTime);
balance.setStatus(BalanceStatus.OPEN);
balance.persist(); // persist !!
......
balance.setCloseAmount(amount);
balance.setLastUpdateTimestamp(now);
}
ただし、同じコードをWebsphere 7にデプロイすると、closeAmount
およびlastUpdate
は更新されません(DBの両方のフィールドは更新されませんでしたが、ログから両方のフィールドがゲッターによって値を返すことができます)、nullとして表示されますが、実行する前に他のフィールドに変更されpersist()
ますメソッドが終了すると有効になります。したがって、WSを終了するメソッドがこれらのフィールドに向けて変更をフラッシュしなかった場合は間違いありません。
JPA(ベンダーに関係なく)は、バランスエンティティオブジェクトを管理し続けpersist()
、メソッドが後で変更を加えて終了した後にオブジェクトをフラッシュする必要があると思いました。Websphere7ではうまくいかないことがわかりました。merge()
方法を入れても
balance.setCloseAmount(amount);
balance.setLastUpdateTimestamp(now);
balance.merge();
それでも役に立たない。
質問:
- OpenJPAはすでにデプロイメントに依存関係として含まれていますが、それでもWebsphereがJPA管理に関与する必要があるのはなぜですか?
- 問題を解決する方法は?
前もって感謝します。