Надежность хранилища предпочтений Eclipse

У меня есть многопользовательское приложение RCP, которое в настоящее время использует несколько настраиваемых пользователем параметров. Некоторые настройки предназначены для конкретной станции, некоторые из них специфичны для пользователя.

Параметры из хранилища предпочтений, которые сохраняют файлы *.prefs в "workspace.metadata.plugins\org.eclipse.core.runtime.settings".

Это было бы хорошо, если бы мы использовали только одну машину/пользователя. Но если пользователь должен был перейти на другую станцию, пользователь будет использовать любые настройки, настроенные для этой станции.

Можно ли указать другую форму для сохранения (не файлов)?

Ответ 1

Похоже, вам нужно сохранить ваши предпочтения в центральном месте, доступное всем пользователям/машинам. Это означает, что вы должны реализовать свой собственный IPersistentPreferencesStore. Затем вы можете переопределить org.eclipse.jface.preference.PreferencePage#doGetPreferenceStore(), чтобы использовать его.

Больший вопрос заключается в том, как реализовать это хранилище центральных настроек, но это зависит от технологий, которые вы используете. В общем, если ваш проект использует центральный сервер, вы, вероятно, должны хранить свои настройки там. Например, если ваш проект уже использует реляционную базу данных, одним из решений было бы создание соответствующих таблиц базы данных и реализация IPersistentPreferencesStore для доступа к этим таблицам через JDBC.

Ответ 2

В соответствии с eclipse wiki настройки основаны на файлах и сохраняются:

  • для каждой установки (но это может различаться для многопользовательских установок), в файлах, хранящихся в <eclipse_home>/eclipse/configuration/.settings/.
    Как правило, один файл на плагин, с расширением .prefs.
    Обратите внимание, что очень мало плагинов используют настройки для установки.
  • для каждой рабочей области, в файлах, хранящихся в <workspace>/.metadata/.plugin/org.eclipse.core.runtime/.settings.
    Обычно для каждого плагина есть один файл с расширением .prefs.
  • для каждого проекта - для параметров уровня проекта - в файлах, хранящихся в подкаталоге .settings папки проекта

Итак, если параметр файла здесь, чтобы остаться, вам может потребоваться:

  • либо export/ reimport параметры сеанса вручную в пользовательском каталоге (утомительно)
  • или сделать какой-то автоматический механизм:
    • для экспорта настроек в реестр пользователей (HKEY_CURRENT_USER/Software/MyRCP/...) на выходе приложения и
    • чтобы импортировать их, читая эти ключи реестра и переопределяя файлы .prefs в локальном каталоге workspace.metadata.plugins\org.eclipse.core.runtime.settings
  • или обмениваться этими настройками с помощью определенной пользовательской ссылки (обертка вокруг запуска RCP будет отвечать за правильную связь даже в Windows с узлами, например)

Ответ 3

Вы должны прочитать о многопользовательских установках

В нашем случае мы отделили настройки для каждого пользователя из конфигурации приложения, установив config.ini, чтобы включить следующее:

[email protected]/Application Data/earthrise
[email protected]/Local Settings/Application Data/earthrise/144/configuration
osgi.sharedConfiguration.area=c:/program files/earthrise/configuration
osgi.configuration.cascaded=true

Результатом этого является то, что любые настройки, заданные пользователем, сохраняются в их перемещаемом профиле, но данные конфигурации конкретного приложения хранятся в локальных настройках.

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

Ловушка с этим заключается в том, что файл журнала ошибок eclipse будет храниться в области экземпляра и перемещаться в своем перемещаемом профиле - не совсем то, что вы хотите. Вы можете создать код в этом подключаемом модуле. См. Обходной путь в eclipse bugzilla - поиск по 256502

Ответ 4

Просто мысль!

Так как метод load() в PreferenceStore делает:

public void load() throws IOException {
    FileInputStream in = new FileInputStream(filename);
    load(in);
    in.close();
}

и вы можете создать PreferenceStore

PreferenceStore(String filename)

или установите его имя файла

public void setFilename(String name) {
    filename = name;
}

вы могли бы "взломать" имя файла в каком-либо месте на общем сервере (или, возможно, в домашней папке пользователей)...