java - 在 Apache Tomcat 中多次调用 REST 服务构造函数

标签 java apache rest tomcat constructor

我有一个在 Apache Tomcat 上运行的 Java 开发的休息服务。 这个服务是由一个类实现的,我明确地为它定义了一个构造函数。 我正在对其进行负载测试,发现构造函数被多次调用。然后在构造函数中分配的资源数量不断增加,并且可能比 GC 释放资源的速度更快。 我试图理解多次调用构造函数的原因。我想该服务被 Apache 卸载得太快了,然后必须重新创建它来处理新请求。 关于为什么会发生这种情况的任何提示?

这只是我所拥有的一小部分:

@Path("/myservice")
public class ProcessService
{
    private DBConnection conn;
    final static public String APP_ID = "MY_APP";

    public ProcessService()
    {
        System.out.println("-----------------------CONSTRUCTOR CALLED --------------------------");
        conn = new DBConnection(APP_ID);
        System.out.println("-----------------------CONSTRUCTOR CALLED-2 --------------------------");
        ...
    }
...

提前致谢。

最佳答案

这是非 CDI JAX-RS 应用程序的正常行为。您的问题的可能解决方案:

  • 使用 CDI(例如 JBoss)将您的应用程序移动到 EE 容器中,或者使用 Weld 将您的 Tomcat 变成支持 CDI 的容器|并使用 CDI 作用域

    @Path("/myservice")
    @ApplicationScoped
    public class ProcessService
    
  • 重构您的应用,使其在每次请求时实例化您的服务时不会造成任何严重问题。例如

    final static public String APP_ID = "MY_APP";
    private static DBConnection conn = new DBConnection(APP_ID);
    
    public ProcessService() {
        System.out.println("-----------------------CONSTRUCTOR CALLED --------------------------");
        // conn is now a static variable so the connection is created only once
        System.out.println("-----------------------CONSTRUCTOR CALLED-2 --------------------------");
    }
    

关于java - 在 Apache Tomcat 中多次调用 REST 服务构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19595794/

相关文章:

java - 正则表达式 - 仅提取日期 no 和 no 或 txt 和代码

apache - .htaccess重写: subdomain as GET parameter and filepath afterdomain intact

apache - 在 Apache 2.4 中禁用 TLS 1.0

java - 词法分析器

java - 我的 try catch 循环陷入无限循环,每次都应该提示用户输入

java - 如何在Eclipse项目中导入javax.servlet API?

java - Jersey - JSON 仅编码特定字段

eclipse - Maven 不更新/下载依赖项

PHP - 通过 file_get_contents 发布 JSON

c# - 通过 Rest API 的 Google Analytics 帐户 ID