如何在Web服务器上保留实时类

时间:2012-01-26 13:48:04

标签: java gwt

我正在开发一个GWT Web应用程序,我想知道是否有办法在服务器上保留一些类。

关键是我想创建一个静态类,它将在服务器上运行并为我管理一些东西..让我们说当前登录的用户。

public class someclass{

private static someclass instance;
private List<user> users;
private someclass(){
users = new ArrayList<user>();
}
public someclass getInstance()
{
    if (instance == null)
        instance = new someclass(); 
    return instance;
}
public addUser(user u)
{
users.add(user);
}
}

假设没有同步需要它对问题无能为力。

让我们说第一个用户登录,并添加到用户列表中。 当第二个用户登录时,用户列表是否为空?还是会有老用户呢?

...谢谢

2 个答案:

答案 0 :(得分:2)

有不同的方法可以做到这一点。但是,解决此方案的一种非常简单的方法是使用启动servlet 在web.xml中,将其定义如下。

<servlet>
 <servlet-name>TestServlet</servlet-name>
 <servlet-class>TestServlet</servlet-class>
 <load-on-startup>1</load-on-startup>
</servlet>

在该servlet的静态字段中维护stat。

答案 1 :(得分:1)

虽然ring bearer的答案是最兼容的(它甚至可以在一些非常旧的servlet容器中工作),但我认为当前的方法是为你的应用程序注册一个上下文监听器。例如,我在web.xml中使用它以使Quartz任务调度程序可用:

 <listener>
     <listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
 </listener>

您的上下文侦听器必须实现javax.servlet.ServletContextListener接口.servlet容器将调用void contextInitialized(javax.servlet.ServletContextEvent sce)以通知应用程序启动。关闭时,servlet容器将调用void contextDestroyed(javax.servlet.ServletContextEvent sce)

使用servlet的方法类似,但您的逻辑将在servlet生命周期操作中。