2012-10-24 29 views
6

Đặc tả Phiên bản Enterprise 5 của OSGi giới thiệu không gian tên osgi.extender. Không gian tên này làm cho nó có thể cho các bó giả định các bộ mở rộng như Kế hoạch chi tiết hoặc Dịch vụ khai báo được cài đặt trong khuôn khổ để mô hình hóa sự phụ thuộc này bằng cách sử dụng tiêu đề Require-Capability.Làm thế nào để khai báo một yêu cầu về khả năng mở rộng SCR?

Chương 135.2 osgi.extender Không gian tên cho chúng tôi biết rằng giá trị của khả năng cho từng bộ mở rộng cụ thể phải được chỉ định trong đặc điểm kỹ thuật tương ứng. Một ví dụ được đưa ra cho Blueprint:

Provide-Capability: osgi.extender; 
    osgi.extender="osgi.blueprint"; 
    uses:="org.osgi.service.blueprint.container,org.osgi.service.blueprint.reflect" 
    version:Version="1.0" 

Tuy nhiên, chương 112 Dịch vụ Declarative Specification không xác định khả năng rằng một thực hiện SCR cung cấp.

Peter Kriens đưa ra ví dụ trong một blog post on Requirements and Capabilities cho biết khả năng cho SCR là osgi.component. Tôi giả định rằng cuối cùng giá trị này sẽ được xác định đúng trong thông số kỹ thuật. Nhưng cho đến lúc đó tôi không thể sử dụng nó.

Vì các tiêu đề Require-CapabilityProvide-Capability được giới thiệu trong Bản phát hành lõi OSGi 4.3, cơ chế đã có sẵn trong triển khai khung. Vì vậy, tôi muốn các gói của tôi thể hiện một yêu cầu về SCR để thực thi SCR có thể được giải quyết từ một kho lưu trữ OBR.

Tôi có thể tưởng tượng một giải pháp mà tôi tạo một gói trống mà một mặt cung cấp khả năng tùy chỉnh và mặt khác yêu cầu một gói triển khai. Ví dụ:

Provide-Capability: com.example.extender; extender=scr 
Require-Bundle: org.apache.felix.scr; bundle-version=1.6.0 

Bất kỳ gói nào bao gồm dịch vụ khai báo sau đó có thể thể hiện yêu cầu về khả năng này. Ví dụ:

Require-Capability: com.example.extender; filter:="(extender=scr)" 

Đây có phải là cách hay để đảm bảo SCR được giải quyết khi triển khai các gói chứa dịch vụ khai báo? Còn cách nào khác không?

Giải pháp tốt cho vấn đề này sẽ là giải pháp cũng có thể được áp dụng cho các gói cũ khác không cung cấp khả năng.

Trả lời

4

Thông số đã xác định không gian tên osgi.extender nhưng các thông số mở rộng khác nhau (Blueprint, DS) cần được cập nhật để ủy quyền triển khai cung cấp khả năng mở rộng thích hợp. Ngay bây giờ, họ có thể không.

Vì vậy, hiện tại, có cách để gói DS của bạn "yêu cầu" gói triển khai DS cần được giải quyết (hoặc thậm chí được cài đặt).

OSGi đang tiến hành các bản cập nhật tiếp theo của Blueprint và DS và các bản cập nhật này sẽ bắt buộc khả năng osgi.extender.

+0

Vì vậy, giải pháp mà tôi đã đề xuất sẽ không hoạt động? –

+3

Nó sẽ. Bạn cũng có thể tạo một đoạn mà thêm khả năng vào gói triển khai DS. –

+0

Tuyệt vời, cảm ơn bạn đã trả lời! –

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