OSGi
Apache Karaf コンテナーに2 つのバンドルをデプロイしています。それらが A と B であるとしましょう。A バンドルは、すべてのデータベース エンティティと永続化ロジックを含むメイン バンドルです。BOSGi
バンドルは、A のメソッドを使用してデータをデータベースに保存するアプリケーションです。また、バンドル B にはCXF
Web サービス エンドポイントがあります。永続性は によって処理されOpenJPA
ます。
バンドル A のメソッドは、エンティティ マネージャーの永続化メソッドをラップします。バンドル B には、バンドル A で定義され、データを永続化するメソッドを持つパラメーターとしてオブジェクトを受け取るメソッドがあります。バンドル B でそのメソッドを呼び出すと、すべて問題なく、データは期待どおりデータベースに永続化されます。
問題は、Spring Bean として公開され、更新する必要があるエンティティを見つけるためのステートメントを含むバンドル A からのオブジェクトへの参照を持つB バンドルのCXF
エンドポイント実装クラスのエンティティを更新したいことです。OSGi
find
メソッドを呼び出すとエンティティが正しく返されますfind
が、新しい値を設定すると、トランザクションがコミットされず、データがデータベースに表示されません。
私が知っているOpenJPA
機能の 1 つは、オブジェクトに永続化を呼び出すと、後でそれに新しいデータを設定でき、そのエンティティを更新するために必要なトランザクションが行われることです。私の場合はうまくいかないようです。CXF
エンドポイント実装クラスに注釈を付けようとしましたorg.springframework.transaction.annotation.Transactional
。しかし、これもうまくいきません。
たぶん、誰かがどこに問題があるのか 知っていますか?CXF
エンドポイントでエンティティを更新するクエリを作成する必要がありますか?