【发布时间】:2019-09-30 21:47:14
【问题描述】:
我正在编写一个小型嵌入式 Jetty Web 服务器,但我有一个结构昂贵的共享对象,我不希望对 servlet 的每个请求都必须重新构建该对象。不幸的是,我在 Jetty 中添加资源的方式是通过 ResourceConfig 构造函数,但这不允许我做任何事情,除了添加类名:
// instantiate this expensive object
MyExpensiveSharedObjectClass myExpensiveSharedObject = new MyExpensiveSharedObjectClass();
String result = myExpensiveSharedObject.search("alpha");
// set up the service
final ResourceConfig resourceConfig = new ResourceConfig(MyService.class);
然后MyService.java 包含您的标准声明,例如:
@GET
@Path("/doSomething")
@Produces(MediaType.APPLICATION_JSON)
public String doSomething() {
// do stuff with myExpensiveSharedObject....except how do I get to it??
// String result = myExpensiveSharedObject.search("alpha");
理想情况下,我想要一种方式,每次请求进入/doSomething 时,我都可以对我之前创建的myExpensiveSharedObject 对象执行方法。
我想这很简单,但我找不到完成此任务的简单方法。
或者 - 有没有办法在 Jetty servlet 中拥有某种形式的共享内存空间?我注意到每一个请求似乎都实例化了一个新的 servlet 实例,因此我不能在对象内建立一个可以被类的所有实例重用的共享内存映射。我确信这是可能的,但我不知道该怎么做。
基本上,我只是想找到一种方法来构建一个昂贵的对象,在构造函数方法中或传递给 servlet 本身是理想的,但在这些 servlet 的上下文中,构造函数是调用每一个请求,所以我不能走那条路。
【问题讨论】:
标签: jersey jetty embedded-jetty