2009-12-16 20 views
18

Tôi đang tìm cách thực hành tốt nhất về việc đóng bộ chứa OSGi.Cách tốt nhất để tắt Thùng chứa OSGi (cụ thể là equinox)

Hiện tại, chúng tôi đang sử dụng một ứng dụng trình khởi chạy nhỏ gọi EclipseStarter.startup() và cài đặt một số gói chính. Sau đó, trình khởi chạy kết thúc.

Khi GUI thử nghiệm (đang chạy dưới dạng gói) được đóng, nó gọi System.exit (0) để tắt thùng chứa, nhưng phải có giải pháp thanh lịch hơn.

Cảm ơn

Trả lời

21

Vui lòng không sử dụng System.exit (0) để tắt khung OSGi. Bạn nên làm điều đó bằng cách dừng gói với ID 0, gói Hệ thống. Bằng cách này, bạn cung cấp cho tất cả các gói một cơ hội để tắt theo cách có trật tự (ví dụ: miễn phí tài nguyên, v.v.).

Đặc tả OSGi xác định thông số sau (Đặc tả lõi, R4.x, 4.2.6 Dừng khung).

Có thể khởi động tắt máy bằng cách dừng gói hệ thống, [...] hoặc gọi phương thức dừng trên đối tượng khung.

Trong chương đó, mô tả chi tiết được đưa ra những gì sẽ xảy ra khi khung bị tắt.

Phản hồi nhóm hệ thống. đối tượng khung cũng được xác định (chương 4.6 Gói Hệ thống):

Gói hệ thống giống với đối tượng khuôn khổ khi khung được khởi chạy, nhưng việc triển khai không bắt buộc phải sử dụng cùng một đối tượng cho khuôn khổ khung và hệ thống bó. Tuy nhiên, cả hai đối tượng phải có id nhóm 0, cùng một vị trí và tên biểu tượng nhóm.

Thông số OSGi có sẵn miễn phí tại trang web của OSGi Alliance (http://www.osgi.org/Specifications/HomePage).

4

tôi cũng sử dụng Equinox trong bối cảnh ứng dụng nhúng và tôi gọi stop() trên Bundle hệ thống và làm theo mà lên với EclipseStarter.shutdown(). Bạn có thể phải dừng tất cả các gói của mình.

Tôi chưa bao giờ thực sự quan tâm đến việc tắt gói trong ứng dụng vì không có trạng thái được giữ lại.

0

Hiện chưa có cách chuẩn nào để thực hiện việc này. OSGI sẽ làm cho phần này của api tiêu chuẩn của họ trong bản phát hành tiếp theo, nhưng tôi cho rằng sẽ mất một lúc trước khi tất cả các gói OSGI thực hiện điều này. Sử dụng mã vùng chứa cụ thể ngay bây giờ, nhưng hãy tránh xa System.exit().

Kính trọng,

Leen Toelen

+0

Cách tiêu chuẩn cho đến nay là những gì tôi mô tả trong câu trả lời của tôi. Đây là hành vi được chỉ định trong thông số OSGi, cũng trong bản phát hành tiếp theo 4.2. Bản phát hành tiếp theo (4.2.) sẽ bao gồm * Dịch vụ mức bắt đầu * tùy chọn có thể được sử dụng để kiểm soát mức bắt đầu của các gói (và khung công tác). – akr

7

tôi luôn kết thúc trong khuôn khổ như thế này:

bundlecontext.getBundle(0).stop();

Gói với id = 0 là hệ thống bó

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