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