0

我一直在考虑为球衣的 jcouchdb 对象实现一个对象池。现在我问自己将 jcouchdb 实例传递到资源端点的最佳方式是什么。

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

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

我正在考虑的另一个想法是将对象池附加到 servlet 上下文(使用 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 回答