2009-09-11 29 views
5

Tôi đang làm việc trên một gói OSGi thực hiện dịch vụ dưới dạng trình bao bọc xung quanh một tệp thực thi gốc. Nghĩa là dịch vụ chạy tệp thi hành với ProcessBuilder, cấp dữ liệu cho một số dữ liệu và truy xuất kết quả. Câu hỏi của tôi là về cách tốt nhất để gói gói này. Bản thực thi nguyên gốc bao gồm một số tệp dữ liệu phụ thuộc mà tất cả phải có trên đĩa để công cụ chạy. Tôi đã tìm thấy rất nhiều tài liệu tham khảo về việc xử lý các DLL gốc trong OSGi, nhưng không có tệp địa chỉ nào được liên kết với một gói phải có mặt trên đĩa thay vì chỉ có thể truy xuất thông qua đường dẫn lớp.Bao gồm các tài nguyên bổ sung với các gói OSGi

Tôi đã nghĩ rằng tôi có thể bao gồm các tệp có giá trị và phụ thuộc trực tiếp trong gói lưu trữ và sau đó trích xuất theo chương trình vào một số thư mục khi gói được bắt đầu. Tùy chọn khác mà tôi có thể nghĩ là đặt tệp thực thi ở đâu đó và đặt thuộc tính hệ thống trỏ đến nó hoặc cái gì đó, nhưng tôi muốn giữ cấu hình ở mức tối thiểu.

Giải pháp không cụ thể cho việc triển khai OSGi cụ thể sẽ tốt đẹp, nhưng nếu không, tôi đang sử dụng Equinox.

Cảm ơn!

Trả lời

2

Giải pháp của bạn hoạt động, tất nhiên. Nhưng bạn phải cẩn thận cũng dừng và loại bỏ bất kỳ tài nguyên nào mà bạn đã trích xuất và bắt đầu trong quá trình cài đặt. Điều này đặc biệt khó theo dõi trong trường hợp một tệp thực thi cũng tạo ra bất kỳ loại tệp làm việc nào.

Bạn nên làm điều này vì một trong những sức mạnh của OSGi là quản lý vòng đời, cho phép bạn cũng loại bỏ các gói và dịch vụ mà không có dấu vết. Đối với điều này, khuôn khổ theo dõi tất cả mọi thứ một gói nào. Nếu bạn tiếp tục chạy sau khi bạn gỡ bỏ gói đã cài đặt và khởi động nó, kết nối bị mất và nó có thể tiếp tục chạy cho đến khi máy được khởi động lại (thường không phải là tùy chọn cho các hệ thống nhúng).

4

Những tệp bổ sung này có cần phải được viết bằng mã gốc không? Nếu không, không có gì ngăn cản bạn đặt bất kỳ tệp nào bạn thích trong một gói.

Vấn đề thường gặp trong OSGi là làm việc trên đường dẫn đến tệp OSGi không cho rằng hệ thống tệp khả dụng (không có gì lạ khi nghe như OSGi đã bắt đầu trong thiết bị nhúng).

Làm cách nào để bạn kiểm soát nơi mã gốc tìm các tệp liên quan của nó? Bạn có cần phải vượt qua nó một con đường?

Nếu bạn muốn có một thư mục để sao chép hoặc giải nén công cụ, sau đó sử dụng:

org.eclipse.core.runtime.Platform.getStateLocation() 

nào mang đến cho bạn sự thư mục làm việc cho các bó.

Nếu bạn muốn tìm ra con đường cho một tập tin đặc biệt trong nhóm của mình, bạn có thể làm:

org.eclipse.core.runtime.FileLocator.toFileURL((context.getBundle().getEntry("/etc/readme.txt"))) 

nào, trong trường hợp này, sẽ trả về một URL tập tin vào /etc/readme.txt trong gói hiện hành.

Cả hai phần mã giả sử chúng nằm trong phương thức start() của trình kích hoạt.

+0

Nền tảng dịch vụ OSGi Đặc điểm kỹ thuật cốt lõi Phiên bản 4.3 cung cấp ['BundleContext.getDataFile (String)'] (https://osgi.org/javadoc/r4v43/core/org/osgi/framework/BundleContext.html#getDataFile% 28java.lang.String% 29), có thể thích hợp. –

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