gpt4 book ai didi

java - 使用 ReSTLet,我可以在哪里预加载某些内容,这样就不会在每次访问资源时处理它?

转载 作者:行者123 更新时间:2023-12-01 15:39:26 24 4
gpt4 key购买 nike

我想使用ReSTLet来处理对某些信息的请求,但是这些信息从磁盘加载需要一些时间,所以我想在ReSTLet服务器启动时执行此步骤,而不是在我的Resource类中,这似乎是在每个请求上实例化。换句话说,我想将它加载到内存中一次。

我正在看这个教程:http://www.2048bits.com/2008/06/creating-simple-web-service-with.html并假设每次有人请求/Users 时,router.attach("/users", UserResource.class); 都会实例化一个新的 UserResource() 对象。假设我想将 User 数据库加载到内存中,以便 UserResource.findUser() 中的查找速度更快。

更新:也许这样的答案可以帮助我? https://stackoverflow.com/a/7865506/318870

更新 2:我想我找到了解决方案,因此我会尽快回复我的发现

最佳答案

来自 ReSTLet 书和 their public source code ,他们只需使用 Resource 类中的 getApplication() 函数即可:

public class Application extends org.restlet.Application {

public static void main(String... args) throws Exception {
// Create a component with an HTTP server connector
final Component comp = new Component();
comp.getServers().add(Protocol.HTTP, 3000);

// Attach the application to the default host and start it
comp.getDefaultHost().attach("/v1", new Application());
comp.start();
}

private final ObjectContainer container;

/**
* Constructor.
*/
public Application() {
/** Open and keep the db4o object container. */
EmbeddedConfiguration config = Db4oEmbedded.newConfiguration();
config.common().updateDepth(2);
this.container = Db4oEmbedded.openFile(config, System
.getProperty("user.home")
+ File.separator + "restbook.dbo");
}

@Override
public Restlet createInboundRoot() {
final Router router = new Router(getContext());

// Add a route for user resources
router.attach("/users/{username}", UserResource.class);

// Add a route for user's bookmarks resources
router.attach("/users/{username}/bookmarks", BookmarksResource.class);

// Add a route for bookmark resources
final TemplateRoute uriRoute = router.attach(
"/users/{username}/bookmarks/{URI}", BookmarkResource.class);
uriRoute.getTemplate().getVariables().put("URI",
new Variable(Variable.TYPE_URI_ALL));

return router;
}

/**
* Returns the database container.
*
* @return the database container.
*/
public ObjectContainer getContainer() {
return this.container;
}
}


/** resource class (UserResource.java) has these functions
/**
* Returns the parent application.
*
* @return the parent application.
*/
@Override
public Application getApplication() {
return (Application) super.getApplication();
}

/**
* Returns the database container.
*
* @return the database container.
*/
public ObjectContainer getContainer() {
return getApplication().getContainer();
}

关于java - 使用 ReSTLet,我可以在哪里预加载某些内容,这样就不会在每次访问资源时处理它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8316961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com