1

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エンドポイントでエンティティを更新するクエリを作成する必要がありますか?

4

1 に答える 1

0

この場合、Spring から Blueprint に切り替えることをお勧めします。たとえば、Karaf で使用される aries の設計図を見ると、たとえばバンドル A から DAO を取得し、バンドル B から「変更メソッド」を呼び出すと、バンドルに接続されたトランザクション マネージャーによって永続化されます。 A.

于 2012-09-20T20:58:04.223 に答える