Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Гостевая книга


Автор: 4epT 30.8.2010, 00:43
Добрый вечер! Пишу на JSP гостевую книгу ... сделал класс Сообщение и класс который хранит в себе коллекции сообщений. Возник вопрос ... как сделать так что бы список сообщений постоянно пополнялся ? Базу данных решил не использовать. Сохраняю все в xml файл. При добавлении нового сообщения получается так что я создаю новый экземпляр класса CommentsDB (класс который хранит в себе коллекцию сообщений) и все сообщения которые были до этого удаляются ... Как сделать 1 глобальный экземпляр класса CommentsDB который будет заполнятся 1 раз при создании новой сессии и удаляться при ее завершении?

Надеюсь понятно изложил суть проблемы) 

Автор: Prof_2000 30.8.2010, 11:03
А Singleton не подходит?

А вообще, по-моему, правильнее реализовывать паттерн Data Access Object - т.е. интерфейс типа MessageDAO чтоб сохранять и читать сообщения, его реализацию XMLMessageDAO, и синглтоновую фабрику для создания экземпляров. Так в любой момент можно будет перейти к использованию базы(если, например, количество пользователей сильно возрастёт)

Автор: 4epT 30.8.2010, 13:16
Цитата(Prof_2000 @ 30.8.2010,  11:03)
А Singleton не подходит?

А вообще, по-моему, правильнее реализовывать паттерн Data Access Object - т.е. интерфейс типа MessageDAO чтоб сохранять и читать сообщения, его реализацию XMLMessageDAO, и синглтоновую фабрику для создания экземпляров. Так в любой момент можно будет перейт

Почитал насчет Singleton, думаю такой вариант подойдет ) Единственное что будет в такой ситуации:

Клиент заходит на JSP страницу, стартует его сессия, создается экзепляр класса Singleton ... что произойдет когда в это же время на страницу зайдет другой клиент? 

В статье в которой я читал там был приведен самый простой вариант:

Код

class Singleton
{
private static Singleton instance;
private Singleton()
{}
public static Singleton getInstace()
{
      if(instance == null)
     {
        instance = new Singleton();
     }
     return instance;
}
}


Наверное можно было попроще задать вопрос) нужно ли реализовывать этот класс "для много поточных приложений" ?

И еще один вопрос) не будет ли конфликтов когда в одно и то же время N пользователей начнут читать и писать в один и тот же файл? За это будет отвечать веб сервер? 

Автор: Prof_2000 30.8.2010, 17:12
Синглтон - общий для всего контекста веб-приложения. Соответственно каждый пользовательский запрос типа "добавить сообщение" обратится к одному и тому же экземпляру. А насчёт конфликтов - сделайте нужные методы synchronized.

Автор: 4epT 30.8.2010, 17:29
Цитата(Prof_2000 @ 30.8.2010,  17:12)
Синглтон - общий для всего контекста веб-приложения. Соответственно каждый пользовательский запрос типа "добавить сообщение" обратится к одному и тому же экземпляру.

Как тогда лучше реализовать Сингелтон?

И вообще походу плохая была идея вместо БД использовать XML ... да?

Автор: 5ad1sT 2.9.2010, 10:26
Цитата(4epT @ 30.8.2010,  17:29)
Цитата(Prof_2000 @ 30.8.2010,  17:12)
Синглтон - общий для всего контекста веб-приложения. Соответственно каждый пользовательский запрос типа "добавить сообщение" обратится к одному и тому же экземпляру.

Как тогда лучше реализовать Сингелтон?

И вообще походу плохая была идея вместо БД использовать XML ... да?

Вообще все равно что использовать. Если ты реализуешь DAO.

Автор: 4epT 2.9.2010, 18:55
А что такое DAO ? можно какой то пример?

Автор: rang3r 4.9.2010, 08:07
DAO паттерн(хотя наверно анти-паттерн) который закрывает прямой  доступ к данным.
 Прочитай про это в книге "Шаблоны проектирования" М.Гранда, там и пример и суть.  

Автор: 5ad1sT 5.9.2010, 21:09
Цитата(4epT @ 2.9.2010,  18:55)
А что такое DAO ? можно какой то пример?

http://www.ibm.com/developerworks/ru/library/j-genericdao/

Вот хороший пример.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)