2009-10-08 17 views
11

Tôi có một ứng dụng RCP nhiều người dùng/vị trí hiện đang sử dụng một số tùy chọn cấu hình người dùng. Một số tùy chọn dành riêng cho trạm, một số tùy chọn cụ thể cho người dùng.Eclipse Preference store persistance

Tùy chọn từ cửa hàng tùy chọn lưu tệp * .prefs thành "workspace.metadata.plugins \ org.eclipse.core.runtime.settings".

Điều này sẽ ổn nếu chúng tôi chỉ sử dụng một máy tính/người dùng. Nhưng nếu người dùng đã đi đến một trạm khác, thì người dùng sẽ sử dụng bất kỳ tùy chọn nào được thiết lập cho trạm đó.

Có thể chỉ định biểu mẫu khác cho sự kiên trì (không phải tệp) không?

Trả lời

7

Có vẻ như bạn cần lưu trữ tùy chọn của mình ở vị trí trung tâm mà tất cả người dùng/máy có thể tiếp cận. Điều này có nghĩa là bạn phải triển khai IPersistentPreferencesStore của riêng mình. Sau đó, bạn có thể ghi đè org.eclipse.jface.preference.PreferencePage#doGetPreferenceStore() để sử dụng.

Câu hỏi lớn hơn là cách triển khai kho lưu trữ tùy chọn trung tâm đó, nhưng điều đó phụ thuộc vào công nghệ bạn đang sử dụng. Nói chung, nếu dự án của bạn sử dụng máy chủ trung tâm, có thể bạn nên lưu trữ các tùy chọn của mình ở đó. Ví dụ, nếu dự án của bạn đã sử dụng một cơ sở dữ liệu quan hệ, một giải pháp là tạo các bảng cơ sở dữ liệu thích hợp và thực hiện IPersistentPreferencesStore để truy cập các bảng đó thông qua JDBC.

10

Theo các các eclipse wiki, các ưu đãi là tập tin dựa trên, và lưu trữ:

  • cho mỗi cài đặt (nhưng điều này có thể thay đổi cho việc cài đặt đa người dùng), trong các tập tin lưu trữ trong <eclipse_home>/eclipse/configuration/.settings/.
    Thường có một tệp cho mỗi plugin, với tiện ích mở rộng là .prefs.
    Lưu ý rằng rất ít trình cắm sử dụng các tùy chọn trên toàn bộ cài đặt.
  • cho mỗi không gian làm việc, trong các tệp được lưu trữ trong <workspace>/.metadata/.plugin/org.eclipse.core.runtime/.settings.
    Thường có một tệp cho mỗi plugin, với tiện ích mở rộng là .prefs.
  • cho từng dự án --cho thiết lập dự án cấp - trong các tập tin lưu trữ trong một .settings thư mục con của thư mục dự án của bạn

Vì vậy, nếu tùy chọn tập tin là ở đây để ở lại, bạn có thể cần phải:

  • hoặc xuất khẩu/tái nhập khẩu các thiết lập phiên bằng tay trong thư mục người dùng cụ thể (tẻ nhạt)
  • hoặc thực hiện một số loại cơ chế tự động:
    • export các thiết lập để đăng ký của người dùng (HKEY_CURRENT_USER/Software/MyRCP/...) tại lối ra của ứng dụng, và
    • nhập chúng bằng cách đọc những khóa registry và trọng .prefs tập tin trong địa phương workspace.metadata.plugins\org.eclipse.core.runtime.settings thư mục
  • hoặc chia sẻ những thiết lập thông qua một số loại liên kết với người sử dụng cụ thể (một wrapper quanh khởi động của RCP sẽ chịu trách nhiệm làm cho liên kết đúng, ngay cả trên Windows with junctions ví dụ)
5

Bạn nên đọc về multi-user installs

Trong trường hợp của chúng tôi, chúng tôi đã tách ra các ưu đãi cho mỗi người dùng từ các cấu hình ứng dụng bằng cách thiết lập config.ini để bao gồm những điều sau đây:

[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 

Kết quả của việc này là bất kỳ sở thích thiết lập bởi người sử dụng được lưu trữ trong hồ sơ chuyển vùng của họ, nhưng dữ liệu cấu hình ứng dụng cụ thể được lưu trữ trong Cài đặt cục bộ.

Điều này không giải quyết được vấn đề về việc có tùy chọn người dùng cụ thể cho một máy trạm cụ thể, nhưng cho phép mỗi người dùng có tùy chọn riêng của họ.

Bắt với điều này là tệp nhật ký lỗi nhật thực sẽ được lưu trữ trong khu vực cá thể và được tiến hành trong hồ sơ chuyển vùng của họ - không thực sự là những gì bạn muốn. Bạn có thể mã hóa điều này trong trình cắm thêm. Xem cách giải quyết tại eclipse bugzilla - tìm kiếm 256502

+2

Không chắc chắn rằng điều này giải quyết câu hỏi ban đầu về lưu ở nơi khác ngoài tệp cục bộ, nhưng nó giải quyết câu hỏi của tôi với đúng tham chiếu và ví dụ hữu ích. Cảm ơn! –

0

Chỉ là một ý nghĩ!

Kể từ khi phương pháp load() của PreferenceStore làm:

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

và bạn có thể tạo ra một PreferenceStore

PreferenceStore(String filename) 

hoặc thiết lập tên file của nó

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

bạn có thể có thể "hack" tên tập tin đến một số nơi trên một máy chủ chia sẻ (hoặc người dùng chia sẻ thư mục nhà pe rhaps) ...

Các vấn đề liên quan