2012-01-26 2 views
0

Я работаю над веб-приложением 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

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

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

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

+0

Извините, что мне не хватает знаний, но можете ли вы указать мне на что-то более конкретное ?. Я предполагаю, что мне нужно создать для этого класс сервлета. Как я могу назвать функции этого класса? Нужно ли мне связываться с подателем с HTTP-запросами с сервера. это кажется немного хлопот – Gleeb

+0

Нет, вам не нужно использовать http-звонки. Вы можете рассматривать его как любой другой класс и иметь общедоступные API, которые предоставят вам информацию, которую вы хотите манипулировать. На стороне сервера все ваши компоненты будут на одной JVM как ваш сервер. –

1

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

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

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

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

Смежные вопросы