0

jersey 用の jcouchdb オブジェクトのオブジェクト プールを実装することを考えています。今、jcouchdb インスタンスをリソース エンドポイントに配信する最善の方法は何かを自問しています。

プールには、jcouchdb オブジェクトを要求し、それを解放して再利用できるようにするためのメソッドがあることを期待しています。

私の最初のアイデアは、InjectableProvider をシングルトンとして実装し、リソース エンドポイントで注釈を使用して「取得」することでした。次に、InjectableProvider はオブジェクト プールから jcouchdb オブジェクトを返し、ビジーとしてマークします。使用後に jcouchdb オブジェクトを解放するにはどうすればよいですか? そして、必要がない場合でも、すべてのリソース エンドポイント インスタンスに対して jcouchdb オブジェクトを要求するでしょうか?! (注釈付きオブジェクトがいつインスタンス化されるかはわかりません)

私が考えていた別のアイデアは、オブジェクト プールをサーブレット コンテキストにアタッチすることでした (set 属性を使用)。

他のアイデアはありますか?

共有リソースとジャージに関しては、基本的に少し混乱しています。うまくいけば、誰かが私のために物事を片付けることができます.

ありがとう

4

1 に答える 1

0

今言ったとおりにすると、コードは次のようになります。

public class MyResource{
     @GET
     @RequestMapping("/bleh")
     public Response getValue(@Context JCouchDBObject object){
        //manipulate object
     }
}

@Provider
public class MyProvider extends InjectableProvider<Context, Parameter>{
   public Injectable<JCouchDBObject> getInjectable(ComponentContext context, Context hp, Parameter param) {
        //GetObject and return
   }
}

私は JCouchDB を使用したことはありませんが、各オブジェクトが DB 接続プールにリンクされていない限り (手動で解放する必要はありません)、これらすべてが処理されます。

しかし:これは InjectableProvider が設計された目的ではありません。通常、InjectableProvider は、ある種のリクエスト オブジェクト (JCouchDBObject の ID など) を作成および解決するために使用されます。次に、サービスを使用して JCouchDBObject を収集し、そこで手動でリリースを処理する必要があります。

于 2012-12-14T22:53:37.303 に答える