我在 Weblogic 上有一个 Jax-RS Jersey Web 服务。它运行良好,但返回大量数据。问题是,如果我同时有超过 4 个服务调用,我用完了服务器上的所有 JVM 内存,那么一切都会停止工作,我必须重新启动。
如何将服务限制为仅运行 2 或 3 个实例并让其他调用等待?
最佳答案
您如何返回数据?您是否创建了整个对象以返回到内存中?如果是这样,那么您可能需要考虑流式传输响应。
您能否向我们介绍一下您的服务正在做什么?
编辑:
您可以像这样流式传输内容(例如来自 ResultSet
的数据);
@GET
public MyResultStream getData()
{
ResultSet rs = queryDatabase();
return new MyResultStream(rs);
}
您需要自己提供 MyResultStream;
public class MyResultStream implements javax.ws.rs.core.StreamingOutput
{
private ResultSet rs;
public MyResultStream (ResultSet rs)
{
this.rs = rs;
}
public void write(OutputStream output)
{
//write any document pre-able
// for example <results>
while (rs.next())
{
//get the data from the ResultSet and write it to the output in XML form
// for example <result><foo>bar</foo></result>
}
//write any document post-amble
// for example </results>
}
}
请记住,您必须以某种方式关闭 ResultSet
。
关于java - 如何构建单一访问 Web 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4851803/