我在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 --------------------------");
...
}
...
提前致谢。
答案 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 --------------------------");
}