java - 如何构建单一访问 Web 服务?

标签 java weblogic jersey jax-rs

我在 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/

相关文章:

java - 如何使用正则表达式获取第一个匹配字符串

java - 从 crontab 运行的 java 程序的日志结果 [权限被拒绝]

jenkins - 在 weblogic 12.1.13 上安装 Jenkins 2.121.2

java - Weblogic : The DBMS driver exception was: I/O Error: SSO Failed: Native SSPI library not loaded. 检查 java.library.path 系统属性

java - 丢失日志 - log4j.xml 配置似乎被忽略 - Weblogic 9.2

javax.ws.rs.NotSupportedException : Could not find message body reader for type: class

java - 如何解决 Jackson 无法处理 JPA bean 中的直接自引用的问题

java.lang.RuntimeException : Failure delivering result ResultInfo{who=null, 请求=1,结果=-1,数据= Intent }到 Activity

java - 如何在 Java 中响应来自终端的命令

java - Jersey REST/JAXB 错误,映射接口(interface)