我正在通过RESTlet实现REST。这是一个构建这样一个宁静的Web服务的惊人框架;它易于学习,语法紧凑。但是,通常,我发现当某人/某个程序想要访问某些资源时,打印/输出XML需要时间,我使用JaxbRepresentation。我们来看看我的代码:
@Override
@Get
public Representation toXml() throws IOException {
if (this.requireAuthentication) {
if (!this.app.authenticate(getRequest(), getResponse()))
{
return new EmptyRepresentation();
}
}
//check if the representation already tried to be requested before
//and therefore the data has been in cache
Object dataInCache = this.app.getCachedData().get(getURI);
if (dataInCache != null) {
System.out.println("Representing from Cache");
//this is warning. unless we can check that dataInCache is of type T, we can
//get rid of this warning
this.dataToBeRepresented = (T)dataInCache;
} else {
System.out.println("NOT IN CACHE");
this.dataToBeRepresented = whenDataIsNotInCache();
//automatically add data to cache
this.app.getCachedData().put(getURI, this.dataToBeRepresented, cached_duration);
}
//now represent it (if not previously execute the EmptyRepresentation)
JaxbRepresentation<T> jaxb = new JaxbRepresentation<T>(dataToBeRepresented);
jaxb.setFormattedOutput(true);
return jaxb;
}
你可以看到,你可能会问我;是的我通过Kitty-Cache实现Cache。因此,如果某些生产成本高昂的XML,并且真的看起来永远不会改变七十年,那么我将使用缓存...我也将它用于可能的静态数据。缓存的最长时间限制是在内存中保留一小时。
即使我缓存输出,有时输出也是无响应的,例如挂起,部分打印,并且在打印剩余文档之前需要时间。 XML文档可以通过浏览器和程序访问,它使用GET。
实际上是什么问题?如果可能的话,我也很想知道RESTlet开发人员的答案。感谢