Как сохранить живой класс на веб-сервере - PullRequest
0 голосов
/ 26 января 2012

Я работаю над веб-приложением GWT, и мне было интересно, есть ли способ сохранить некоторые классы на сервере живыми.

Дело в том, что я хотел бы создать статический класс, который будет работатьна сервере и управляйте чем-то для меня .. допустим, в данный момент вошли пользователи.

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 ]

2 голосов
/ 26 января 2012

Есть разные способы сделать это. Тем не менее, очень простой способ справиться с этим сценарием будет использовать запускающий сервлет В web.xml определите это следующим образом.

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

Поддерживать статистику в статических полях этого сервлета.

1 голос
/ 26 января 2012

Хотя ответ кольцевого канала является наиболее совместимым (он будет работать даже в некоторых очень старых контейнерах сервлетов), я думаю, что текущий подход заключается в регистрации прослушивателя контекста для вашего приложения.В качестве примера я использую это в своем файле web.xml, чтобы иметь доступный планировщик задач Quartz:

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

Ваш прослушиватель контекста должен реализовывать интерфейс javax.servlet.ServletContextListener. Контейнер сервлета будет вызывать void contextInitialized(javax.servlet.ServletContextEvent sce)уведомить о запуске приложения.При завершении работы контейнер сервлета вызовет void contextDestroyed(javax.servlet.ServletContextEvent sce).

Подход с сервлетами аналогичен, но ваша логика будет заключаться в операциях жизненного цикла сервлета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...