![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| ochnev |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 253 Регистрация: 27.3.2006 Репутация: нет Всего: нет |
Как обычно на практике хранят глобальные и пользовательские настройки приложения?
Интересует способ помимо базы данных. XML, properties и прочее. Что удобнее, практичнее? В идеале, хотелось бы иметь удобный способ, подходящий и для мобильного приложения, и для web-приложения, и для обычного desktop приложения. |
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
ochnev, вопрос размывчитый
Что касается меня, то в основном БД и .properties файлы. XML почти никогда не использую. |
|||
|
||||
| Connie |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 382 Регистрация: 12.8.2008 Репутация: 1 Всего: 9 |
Опять же смотря какие настройки.
Я просто сериализую класс с настройками в файл. Простая запись и простое чтение. Кроме того, если пользователь чего то нахомутает с настройками, то можно просто удалить этот файл и программа запустится с дефолтными настройками, конечно можно было бы это же сделать и через properties файл, но кода бы получилось чуть больше. У меня в настройках хранятся положение программы, размеры элементов и т.п. То есть ничего критичного. |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Идеального способа на все случаи жизни нет. Где-то тут это уже обсуждалось.
Хранить пользовательские предпочтения (выбранный шрифт, расположения окон и т.д.) вроде удобно с помощью preferences. Но там ограничение - длина записи не может быть больше 8 кБ. И вручную записи не отредактируешь (их не так просто отыскать на компьютере), но для такого типа данных это обычно не требуется. Если пользовательское приложение работает в связке с сервером, то возможно хранение настроек на сервере в базе данных. Это позволяет клиенту работать со своей конфигурацией из разных мест - например, из офиса и из дома. В серверном приложении необходимо иметь возможность редактировать настройки. Серверное приложение может не иметь GUI. Проперти - файл - самое простое решение. Возможно, xml файл тоже. Но здесь некоторую сложность представляет настройка проекта так, чтобы эти файлы паковались отдельно от jar. Чтобы можно было остановить приложение, отредактировать файл любым редактором, и запустить опять. Настройки удобно хранить в виде текста (проперти-формат или xml), а не сериализованного обьекта - так проще редактировать и анализировать. Также проще разрешать ситуации, когда приложение модифицируется и желательно сохранить возможность использовать старые настройки. Это сообщение отредактировал(а) COVD - 11.5.2009, 18:09 |
|||
|
||||
| carper |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 1 Всего: 8 |
Идеального способа действительно нет, но обычно удобнее хранить настройки в базе данных - так проще и в плане целостности данных и обеспечения централизованного доступа и даже можно задействовать тригеры или ХП, чтобы установить минимальную защиту "от дурака", например, предотвратить эксперименты пользователя с установкой размера экрана в точку, или вывода белого текста на белом фоне и т.п.
В общем-то, никто не мешает достигать того же и другими средствами, но мне кажется так будет менее удобно при достаточном количестве оных. |
|||
|
||||
| Eric_Cartman |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 2.3.2008 Репутация: 1 Всего: 1 |
присоединяюсь к некоторым ораторам выше =)
от себя добавлю, что есть достаточно неплохой, на мой взгляд, пакет на эту тему: Commons Configuration |
|||
|
||||
| Forsaken |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 30.12.2008 Репутация: нет Всего: 3 |
Скажите пожалуйста, а вообще Preferences всегда сохраняет что нить в реестр (Windows)? Как-то у меня не выходит обойти эту фишку, я хочу сразу же в XML сохранять.
Вообще я просто изучаю механизм Preferences, в реальности я бы хотел сохранять настройки в bin фаил но при этом иметь возможность экспортировать/импортировать в XML.. Как я понимаю Preferences для этого не очень подходит? Это сообщение отредактировал(а) Forsaken - 25.3.2010, 11:57 |
|||
|
||||
| Metal_Heart |
|
|||
|
а почему бы и нет? ![]() ![]() Профиль Группа: Участник Сообщений: 728 Регистрация: 31.3.2005 Где: Москва Репутация: 4 Всего: 12 |
Forsaken, Реестр венды здесь не причем и туда ничего не пишется!
LCD в факе написал статью, как сериализовывать в ХМЛ. Очень простой способ и как раз для твоих требований. Что касаемо BIN-файла - придумываешь любой удобный для тебя формат данных (без ограничений) - и в перед -------------------- не стыдно учиться, а стыдно не учиться |
|||
|
||||
| jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Вот это неправда. Preferences хранит ваши настройки в platform-dependent виде. Под Windows это как раз реестр. Prooflink Это сообщение отредактировал(а) jk1 - 25.3.2010, 14:17 -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
| Forsaken |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 30.12.2008 Репутация: нет Всего: 3 |
Metal_Heart
Спасибо за ответ! Почитаю статью LCD, это очень интересно Что касается реестра винды, то добавлю к jk1 , что Preferences хранится в разделе HKEY_CURRENT_USER\Software\JavaSoft, можете сами посмотреть... jk1 Спасибо за помощь! Это сообщение отредактировал(а) Forsaken - 25.3.2010, 16:53 |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
+1. Покрывается 90% юзкейсов. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| Forsaken |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 30.12.2008 Репутация: нет Всего: 3 |
batigoal,
А если настройки разбиты иерархически.. делаете псевдоиерархию в .properties ? jk1, Правда по этой ссылке, тоже ключь хранится в реестре.., а избежать реестра не как нельзя с Preferences? А то хочется их хранить где нибудь в другом месте.. |
|||
|
||||
| jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Можно. Реализуйте своего наследника AbstractPreferences и в его методах сохраняйте и извлекайте ключи и значения откуда вам удобно. Я для управления иерархическими настройками использовал сериализацию в XML с помощью XMLEncoder, удобно и без лишнего геморроя. -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
| Forsaken |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 30.12.2008 Репутация: нет Всего: 3 |
jk1
Спасибо большое! Правда я еще недобрался до понятия сереализации, но догадываюсь что это приспособление для сохранения состояния объекта. Пока временно попользуюсь Properties объектами. Тогда у меня есть еще не особо важный вопрос. Где хранить настройки? Я уже много прочел о Properties (на сайте http://java.sun.com и в книгах).. там везде пользовательские настройки предлогается хранить в папке пользователя. Мне это очень ненравится, я хочу их хранить в папке программы. А как Вы считаете правильно их хранить? Это сообщение отредактировал(а) Forsaken - 27.3.2010, 14:25 |
|||
|
||||
| jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Forsaken,
на правильно администрируемой системе приложение в общем случае будет запущено от имени пользователя без прав администратора. В этом случае прав на запись в папку приложения может не быть. Как следствие, настройки сохранены не будут. А вот домашняя папка пользователя в этом случае - абсолютно безопасный вариант. Кроме того, вы автоматически получите свой комплект настроек для каждого пользователя без усилий с вашей стороны. -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
| Forsaken |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 30.12.2008 Репутация: нет Всего: 3 |
jk1,
Тогда под Windows логично все настройки содержать, в папке AppData, чтобы не разводить помойку в его личной папке... Пока придумал только идти в реестр (под Windows) и получать значение ключа Local AppData расположенного в ветке HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\ Это сообщение отредактировал(а) Forsaken - 28.3.2010, 08:15 |
|||
|
||||
| jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Вернет вам адрес домашней папки пользователя практически на любой ОС. А от него уже можно создавать нужную вам иерархию. -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
| Forsaken |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 30.12.2008 Репутация: нет Всего: 3 |
jk1,
Только так нехорошо делать, у Windows папка для настроек программ (AppData) от версии к версии изменяет название. Для Windows придется использовать либо ключи реестра, либо Win32 API (это кажется называется JNI), а под другие ОС создавать иерархию. Правда так неприятно когда в моей папке гадит какая-нить программа, уж не знаю как к этому относятся пользователи других ОС. |
|||
|
||||
| jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Честно говоря не понимаю, почему бы просто не сделать в
папку с названием вашего приложения и не хранить все настройки там. Проверено, на разных осях проблем не вызывает. Подобным образом поступают, например, NetBeans и Idea. А раз уж билли приспичило каждый раз менять названия папок типа Application Data, пусть сам там свои настройки и хранит. -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Нет. Этот как раз и есть оставшиеся 10%, когда нужен XML. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| Metal_Heart |
|
|||
|
а почему бы и нет? ![]() ![]() Профиль Группа: Участник Сообщений: 728 Регистрация: 31.3.2005 Где: Москва Репутация: 4 Всего: 12 |
Каюсь, перепутал с Properties, который сохраняет параметры в INI-файл. ---------- П.С. дааа, порастерял я свои навыки. Придется учиться заново! -------------------- не стыдно учиться, а стыдно не учиться |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |