2009-10-08 8 views
11

J'ai une application RCP à plusieurs utilisateurs/emplacements qui utilise actuellement plusieurs options configurables par l'utilisateur. Certaines préférences sont spécifiques à la station, certaines sont spécifiques à l'utilisateur.Persistance du magasin de préférence Eclipse

Les options proviennent d'un magasin de préférences qui enregistre les fichiers * .prefs dans "workspace.metadata.plugins \ org.eclipse.core.runtime.settings".

Ce serait bien si nous n'utilisions qu'une seule machine/utilisateur. Mais si un utilisateur devait se rendre à une autre station, l'utilisateur utiliserait les préférences configurées pour cette station.

Est-il possible de spécifier un autre formulaire pour la persistance (pas de fichiers)?

Répondre

7

Il semble que vous ayez besoin de stocker vos préférences dans un emplacement central accessible à tous les utilisateurs/machines. Cela signifie que vous devez implémenter votre propre IPersistentPreferencesStore. Ensuite, vous pouvez remplacer org.eclipse.jface.preference.PreferencePage#doGetPreferenceStore() pour l'utiliser. La plus grande question est de savoir comment implémenter ce magasin de préférences centrales, mais cela dépend des technologies que vous utilisez. En général, si votre projet utilise un serveur central, vous devriez probablement y stocker vos préférences. Par exemple, si votre projet utilise déjà une base de données relationnelle, une solution consisterait à créer des tables de base de données appropriées et à implémenter IPersistentPreferencesStore pour accéder à ces tables via JDBC.

10

Selon le l'eclipse wiki, les préférences sont basés sur des fichiers, et stockés:

  • pour chaque installation (mais cela peut varier pour les installations multi-utilisateurs), dans des fichiers stockés dans <eclipse_home>/eclipse/configuration/.settings/. Il existe généralement un fichier par extension, avec une extension .prefs.
    Notez que très peu de plug-ins utilisent des préférences à l'échelle de l'installation.
  • pour chaque espace de travail, dans les fichiers stockés dans <workspace>/.metadata/.plugin/org.eclipse.core.runtime/.settings. Il existe généralement un fichier par extension, avec une extension .prefs.
  • pour chaque projet --pour les paramètres au niveau du projet - dans des fichiers stockés dans un sous-répertoire .settings de votre dossier de projet

Donc, si l'option de fichier est là pour rester, vous devrez peut-être:

  • soit export/réimporter les paramètres de session manuellement dans un répertoire spécifique à l'utilisateur (fastidieux)
  • ou faire une sorte de mécanisme automatisé:
    • à exporter les paramètres vers à la sortie de l'application, et
    • pour les importer en lisant ces clés de registre et en remplaçant les .prefs fichiers dans le répertoire workspace.metadata.plugins\org.eclipse.core.runtime.settings locaux
  • registre (HKEY_CURRENT_USER/Software/MyRCP/...) de l'utilisateur ou les partager paramètres par une sorte de lien spécifique à l'utilisateur (une enveloppe autour de la mise en service du RCP serait chargé de faire le lien à droite, même sous Windows with junctions par exemple)
5

Vous devriez lire multi-user installs

Dans notre cas, nous avons séparé les préférences par l'utilisateur de la configuration de l'application en définissant le config.ini inclure les éléments suivants:

[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 

Le résultat est que les préférences définies par l'utilisateur sont stockés dans leur profil itinérant, mais les données de configuration spécifiques à l'application sont stockées dans les paramètres locaux.Ceci ne résout pas le problème d'avoir des préférences utilisateur spécifiques à un poste de travail particulier, mais permet à chaque utilisateur d'avoir ses propres préférences. Il est à noter que le fichier journal des erreurs Eclipse sera stocké dans la zone d'instance et sera transporté dans son profil itinérant - pas vraiment ce que vous voulez. Vous pouvez coder autour de ceci dans le plug-in. Voir la solution de contournement sur eclipse bugzilla - recherche de 256502

+2

Je ne suis pas sûr que cela répond à la question initiale sur la sauvegarde ailleurs que sur les fichiers locaux, mais il a répondu à ma question avec exactement la bonne référence et un exemple utile. Merci! –

0

Juste une pensée!

Depuis la méthode load() de PreferenceStore fait:

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

et vous pouvez créer un PreferenceStore

PreferenceStore(String filename) 

ou définir son nom de fichier

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

vous pourriez être capable de "pirater" le nom du fichier à un endroit sur un serveur partagé (ou le dossier de départ partagé par les utilisateurs pe rhaps) ...

Questions connexes