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

时间:2013-10-25 17:14:24

标签: java apache rest tomcat constructor

我在Java上开发了一个在Apache Tomcat上运行的休息服务。 这个服务是由一个类实现的,我为它明确定义了一个构造函数。 我正在加载测试它,我发现构造函数被多次调用。然后,构造函数中分配的资源数量不断增加,并且可能比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 --------------------------");
        ...
    }
...

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

  • 将您的应用程序移动到带有CDI的EE容器(例如JBoss)或将您的Tomcat转换为具有Weld的CDI容器,并使用CDI范围

    @Path("/myservice")
    @ApplicationScoped
    public class ProcessService
    
  • 重构您的应用,以便在每个请求上实例化您的服务时不会造成任何严重问题。 e.g。

    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 --------------------------");
    }