您如何从对象池注入和处理数据库对象到资源?

时间:2012-12-13 13:26:37

标签: couchdb jersey injectableprovider

我一直在考虑为jersey实现jcouchdb对象的对象池。现在我问自己,将jcouchdb实例传递给资源端点的最佳方法是什么。

我希望池有一个方法来请求一个jcouchdb对象并释放它以便可以重用它。

我的第一个想法是将InjectableProvider实现为单例,并在资源端点中使用注释来“抓取”它。然后,InjectableProvider从对象池返回一个jcouchdb对象,并将其标记为忙。我如何使用后释放jcouchdb对象?我会为每个资源端点实例请求一个jcouchdb对象,即使我从来不需要它?! (不知道注释对象何时被实例化)

我想到的另一个想法是将对象池附加到servlet上下文(使用set属性)。

还有其他想法吗?

当我谈到共享资源和球衣时,我基本上有点困惑。希望有人能为我解决问题。

谢谢

1 个答案:

答案 0 :(得分: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,但除非每个对象都链接到数据库连接池 - 否则无需手动释放 - 所有这些都将为您处理。

但是: 这不是InjectableProvider的设计目标。通常,InjectableProvider将用于创建和解析某种请求对象(例如JCouchDBObject的ID等)。然后你应该使用一个服务来收集JCouchDBObject并处理那里的任何手动释放。