2013-01-31 45 views
7

Tôi chỉ mới bắt đầu phát triển Apache sling và CQ5. Có khái niệm về việc sử dụng các gói OSGI trong Sling.cách gói osgi được sử dụng bởi sling

Tôi không thể tìm hiểu cách khung làm việc thực sự tương tác với các gói này và phản hồi từ các gói đi đâu?

Trả lời

7

OSGi là khung mô-đun và nền tảng dịch vụ được sử dụng bởi sản phẩm Sling và CQ5. Bản thân Sling bao gồm một loạt các gói được lưu trữ trong thùng chứa Felix OSGi. Các gói là một tập hợp các thành phần/dịch vụ và các lớp java được quản lý bởi vùng chứa. Gói có thể chỉ định gói nào sẽ được nhập, xuất và cũng là phiên bản của những phụ thuộc đó.

Có một số cách bạn có thể tương tác với OSGi từ Sling. Từ một JSP/JSP bạn có thể sử dụng đối tượng sling (loại SlingScriptHelper), mà rất có thể có sẵn trong trang JSP của bạn nếu bạn đã bao gồm các dòng sau:

<%@include file="/libs/foundation/global.jsp"%> 

trong thành phần của bạn hoặc có những điều sau đây:

<cq:defineObjects> 

bạn có thể sử dụng nó như vậy:

QueryBuilder queryBuilder = sling.getService(QueryBuilder.class); 

Thêm vào đó, nếu bạn có các thành phần OSGi của riêng bạn (ví dụ Servlet, dịch vụ, vv), bạn có thể tiêm nhắc đến khác Các thành phần/dịch vụ OSGI sử dụng chú thích SCR. Bertrand mô tả điều này trong câu trả lời của mình cho Getting OSGi services from a bundle in Sling/CQ. Hiệu quả này có nghĩa là thêm chú thích @Reference để biến thành phần OSGi của bạn trong các thành phần của bạn, như vậy:

@Reference 
private SlingRepository repository; 

Khi thành phần của bạn được nạp, sau đó tham chiếu sẽ được tiêm bằng container OSGi.

Gói không có phản hồi như vậy. Một bó triển khai nên được hiển thị trong hệ thống điều khiển:

http://localhost:4502/system/console/bundles 

với các thành phần của nó, dịch vụ & cấu hình tuyên bố ở đây:

http://localhost:4502/system/console/services 
http://localhost:4502/system/console/components 
http://localhost:4502/system/console/configMgr 

(Thay thế localhost: 4502 với riêng server host CQ của bạn: cổng)

Khi bạn đã nhận được một tham chiếu đến một thành phần, sau đó bạn có thể gọi các phương thức trên đó và sử dụng các giá trị trả lại từ các cuộc gọi đó.

+0

Cảm ơn SO MUCH !!! Tôi gần như mất hy vọng về điều này .. Tài liệu thông thường trên internet không trả lời câu hỏi này –

+0

Tài liệu trong ngày [Trang web nhà phát triển CQ5] (http://dev.day.com/docs/en/cq/current.html # Phát triển% 20on% 20CQ) và [blog] (http://dev.day.com/content/ddc/blog/2008/05/slingosgi.html) là khá tốt. Ngoài ra, [Felix/SCR] (http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html) là hữu ích. Cuối cùng, hãy kiểm tra các bài kiểm tra đơn vị/tích hợp cho [Sling project) (https://github.com/apache/sling) vì chúng thường cho thấy cách tốt nhất để sử dụng các API Sling khác nhau. Vui lòng chấp nhận câu trả lời nếu đáp ứng nhu cầu của bạn. ;-) – diffa

+0

Thực ra tôi phải học CQ5 (bao gồm Sling, OSGi, Felix, bó vv) trong 3 ngày !! :) Vì vậy, tôi chỉ vội vã trên các trang web ngay bây giờ. Cảm ơn nhiều –

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