2009-10-08 9 views
11

Mam aplikację RCP dla wielu użytkowników/lokalizacji, która obecnie wykorzystuje kilka opcji konfigurowanych przez użytkownika. Niektóre preferencje dotyczą konkretnej stacji, niektóre są specyficzne dla użytkownika.Kompensacja sklepu Eclipse Preference

Dostępne opcje pochodzą ze sklepu preferencji, który zapisuje pliki * .prefs w "workspace.metadata.plugins \ org.eclipse.core.runtime.settings".

Byłoby dobrze, gdybyśmy używali tylko jednego komputera/użytkownika. Ale jeśli użytkownik miałby przejść do innej stacji, wówczas użytkownik użyłby ustawień, które zostałyby ustawione dla tej stacji.

Czy można określić inny formularz trwałości (nie pliki)?

Odpowiedz

7

Wygląda na to, że musisz zachować swoje preferencje w centralnym miejscu, do którego mogą dotrzeć wszyscy użytkownicy/komputery. Oznacza to, że musisz zaimplementować swój własny IPersistentPreferencesStore. Następnie możesz zastąpić org.eclipse.jface.preference.PreferencePage#doGetPreferenceStore(), aby go użyć.

Największe pytanie brzmi, jak zaimplementować ten centralny magazyn preferencji, ale zależy to od technologii, z których korzystasz. Ogólnie, jeśli twój projekt korzysta z centralnego serwera, prawdopodobnie powinieneś tam zapisać swoje preferencje. Na przykład, jeśli twój projekt korzysta już z relacyjnej bazy danych, jednym z rozwiązań byłoby utworzenie odpowiednich tabel bazy danych i wdrożenie IPersistentPreferencesStore, aby uzyskać dostęp do tych tabel za pośrednictwem JDBC.

10

Zgodnie z tym eclipse wiki, preferencje bazują na plikach i przechowywane:

  • dla każdej instalacji (ale może ulec zmianie w przypadku instalacji dla wielu użytkowników), w plikach przechowywanych w <eclipse_home>/eclipse/configuration/.settings/.
    Zwykle istnieje jeden plik na wtyczkę z rozszerzeniem .prefs.
    Należy pamiętać, że bardzo niewiele wtyczek korzysta z preferencji dotyczących całego systemu.
  • dla każdego obszaru roboczego, w plikach przechowywanych w <workspace>/.metadata/.plugin/org.eclipse.core.runtime/.settings.
    Zwykle istnieje jeden plik na wtyczkę z rozszerzeniem .prefs.
  • dla każdego projektu --for ustawieniach na poziomie projektu - w plikach przechowywanych w .settings podkatalogu folderu projektu

Więc jeśli opcja plik jest tu zatrzymać, może być konieczne:

  • albo export/zaimportuj ustawienia sesji ręcznie w katalogu użytkownika specyficzne (nudny)
  • lub zrobić jakiś rodzaj automatycznego mechanizmu:
    • wyeksportować ustawienia do rejestru użytkownika (HKEY_CURRENT_USER/Software/MyRCP/...) przy wyjściu z aplikacji, a
    • importować je czytając te klucze rejestru i przesłanianie .prefs plików w lokalnym workspace.metadata.plugins\org.eclipse.core.runtime.settings katalogu
  • lub udostępniać te ustawienia z jakiegoś konkretnego użytkownika łącza (owinięcie wokół uruchamiania RCP będzie odpowiedzialny za podjęcie właściwej linku, nawet na Windows with junctions na przykład)
5

należy przeczytać o multi-user installs

W naszym przypadku mamy oddzielone preferencji poszczególnych użytkowników z konfiguracji aplikacji poprzez ustawienie config.ini zawierać następujące elementy:

[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 

Wynikiem tego jest, że wszelkie preferencje ustawione przez użytkownika są przechowywane w profilu mobilnym, ale dane konfiguracyjne specyficzne dla aplikacji są przechowywane w ustawieniach lokalnych.

Nie rozwiązuje to problemu posiadania preferencji użytkownika specyficznych dla konkretnej stacji roboczej, ale pozwala każdemu użytkownikowi mieć własne preferencje.

Połów z tym, że plik dziennika błędów zaćmienia będzie przechowywany w obszarze instancji i zostanie przeniesiony w jego profilu mobilnym - naprawdę nie jest to, co chcesz. Możesz kodować wokół tego w wtyczce. Zobacz obejście problemu w eclipse bugzilla - wyszukaj 256502

+2

Nie jestem pewien, czy odpowiada to oryginalnemu pytaniu o zapisywanie w innym miejscu niż pliki lokalne, ale skierował moje pytanie z dokładnie właściwym odnośnikiem i pomocnym przykładem. Dzięki! –

0

Tylko myśl!

Ponieważ metoda load() z PreferenceStore robi:

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

i można albo stworzyć PreferenceStore

PreferenceStore(String filename) 

lub ustawić jego nazwa pliku

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

może być może "zhakować" nazwę pliku w jakimś miejscu na udostępnionym serwerze (lub udostępnionym folderze domowym użytkownika pe rhaps) ...

Powiązane problemy