Java Web服务对象(JAX-WS)生命周期

时间:2012-06-19 12:40:19

标签: java jax-ws

我目前正在开发一个公开Web服务接口的Java Web应用程序。我的Web服务的类定义如下:

@WebService()
public class ETL_WS {
    private String TOMCAT_TEMP_DIR;
    private final int BUFFER_SIZE = 10000000;
    private ConcurrentHashMap myMap;
    private String dbTable = "user_preferences";

    public ETL_WS() {
        Context context = null;
        try {
            context = (Context) new InitialContext().lookup("java:comp/env");
            this.TOMCAT_TEMP_DIR = (String) context.lookup("FILE_UPLOAD_TEMP_DIR");
        }catch(NamingException e) {
        System.err.println(e.getMessage());
    }

    public long getCouponMapCreationTime() {
        return couponMap.getCreationTime();
    }

}

由于我需要所有请求来查看相同的ConcurrentHashMap myMap实例,我想知道Web服务对象的生命周期是什么。具体来说,我知道它是在第一个客户端请求时初始化的。但是,所有客户都会看到myMap对象的相同实例吗?如果没有,这怎么可能?

感谢您的时间。

2 个答案:

答案 0 :(得分:3)

简短回答:不,您无法控制应用程序服务器将创建此类的实例数。唯一可靠的是,在第一个请求之前至少会有一个对象被实例化。 通常,应用程序服务器为每个工作线程创建一个实例,这意味着相同类的数十个对象。

但是,在这些实例之间可以有公共数据,最简单的解决方案是使用static成员变量。保证静态成员在每个对象中都是唯一的,因为它们属于该类。

@WebService()
public class ETL_WS {
    // ...
    private static ConcurrentHashMap myMap;
    // ...
}

答案 1 :(得分:1)

我能想到的一种方法是将它保存在Webservice后面的单例中,这样WS生命周期并不重要(它是单例 - 但WS接口的目的是简单地获取请求在,最好将应用程序的核心逻辑封装在服务中。)