2011-02-07 44 views
12

Tôi đang phát triển một ứng dụng tìm kiếm dựa trên ngữ nghĩa trong java. Để làm cho các ứng dụng mô-đun, tôi nghĩ để sử dụng kiến ​​trúc osgi. Nhưng kể từ khi tôi mới đến osgi, tôi không có ý tưởng về những ưu và khuyết điểm của việc sử dụng nó. Bất cứ ai có thể vui lòng giải thích lợi thế/bất lợi của việc sử dụng osgi và những gì sắp xếp của một ứng dụng sẽ được hưởng lợi bằng cách sử dụng osgi/những gì các ứng dụng sẽ đạt được bằng cách làm như vậy ??sử dụng osgi để phát triển một ứng dụng

Cảm ơn bạn !!

Trả lời

23

Trong một vài từ OSGi là một tiêu chuẩn được sử dụng để xây dựng các ứng dụng mô-đun. Nó bổ sung thêm mức độ mới của mô-đun - bó (aka. Thành phần, mô-đun). Mỗi bó chứa các lớp và các giao diện và những gì là quan trọng nhất nó phải rõ ràng nhà nước:

  • mà các thành phần khác hoặc Java gói nó sử dụng,
  • và những gói nó muốn để lộ sẽ được sử dụng bởi các thành phần khác.

Từ các điểm xem kỹ thuật là các tệp jar có tệp mở rộng bit META-INF/MANIFEST.MF. Tất cả các thông tin nói trên được lưu trữ trong tập tin MANIFEST.MF.

Từ quan điểm thực tế, nhân chứng này có cả ưu điểm và nhược điểm. Đối với tôi, lợi thế lớn nhất là bạn buộc phải suy nghĩ về kiến ​​trúc, mô-đun và tương tác giữa chúng nhiều hơn trong các ứng dụng tiêu chuẩn. Điều này có thể tạo ra kiến ​​trúc tốt hơn trong đó mỗi mô-đun chịu trách nhiệm cho các nhiệm vụ và mô-đun được xác định rõ có thể được sử dụng lại. Nếu nói đến nhược điểm, việc tạo ra nhiều mô-đun có thể gây đau đớn đôi khi. Nó là khá dễ dàng để có rất nhiều mô-đun và nếu bạn thực sự có rất nhiều người trong số họ có thể khó để duy trì tất cả các phụ thuộc giữa các mô-đun (chu kỳ phụ thuộc là khá đau đớn).

OSGi không chỉ là tiêu chuẩn chỉ xây dựng các ứng dụng mô-đun. Nó cũng chỉ định môi trường trong đó các gói tồn tại và được chạy. Đây là điều bạn nên biết - khi sử dụng OSGi, bạn phải khởi động ứng dụng của mình trong một môi trường đặc biệt. Môi trường này (ví dụ: Eclipse Equinox) có trách nhiệm chạy ứng dụng của bạn. Nó cung cấp một số khả năng ưa thích. Ví dụ, bạn có thể thêm một gói vào ứng dụng đang chạy mà không cần phải dừng ứng dụng này - đây có thể là một yếu tố thực sự quan trọng trong một số loại ứng dụng (nhưng IMHO không có nhiều ứng dụng thực sự cần điều này). Điều thực sự thực sự quan trọng cũng là một thực tế rằng một số thư viện mã nguồn mở có thể không hoàn toàn tương thích với cơ sở hạ tầng OSGi và có thể khó sử dụng chúng ngoài hộp như trong các ứng dụng Java chuẩn (hãy nhớ rằng trong OSGi) mọi thứ nên là một gói). Tuy nhiên, rất nhiều thư viện phổ biến được gói thành bó - ví dụ Spring cung cấp bundles repository chứa nhiều thư viện phổ biến (nhưng không phải tất cả).

OSGi khá phức tạp và khó mô tả nó và khả năng của nó trong một vài từ.Những gì tôi đã viết chỉ là các yếu tố quan trọng nhất (IMO) của OSGi. Nhưng OSGI còn hơn thế nữa, ví dụ nhóm có thể gửi sự kiện cho nhau, họ có thể cung cấp dịch vụ cho nhau. Nếu bạn quan tâm đến nhiều chi tiết hơn, tôi khuyên bạn nên thực hiện một hướng dẫn. Tôi có thể đề nghị this one in Java World. Sau đó bạn có thể xem this free e-book về OSGi (nó chứa rất nhiều chi tiết). Tất cả các chi tiết về OSGi có thể được tìm thấy trong thông số kỹ thuật chính thức nhưng tôi không nói rằng chúng dễ đọc (ít nhất là ở đầu) - bạn có thể tìm thấy chúng here (trước khi tải xuống, bạn sẽ phải chấp nhận giấy phép và một số thông báo pháp lý) .

Để tóm tắt, tôi nghĩ OSGi rất hữu ích trong khi xây dựng các ứng dụng mô-đun nhưng điều này là chắc chắn không miễn phí. Đó là một tiêu chuẩn khá nặng có thể không cho phép bạn làm một số việc và buộc bạn phải làm những việc cách OSGi.

Một số liên quan SO câu hỏi:

+0

Cảm ơn bạn rất nhiều vì câu trả lời chi tiết của bạn :) – Izza

+0

bây giờ với sự ra đời của Microservices, các Microservices khác nhau hay tốt hơn như thế nào khi so sánh với OSGi? – yathirigan

1

Bạn cần phải viết một cuốn sách để trả lời đúng câu hỏi đó. Thật vậy, nhiều cuốn sách đã được viết về chủ đề này. Nếu bạn thực sự muốn tìm hiểu về OSGi, tôi khuyên bạn nên tìm kiếm một cuốn sách như vậy.

OSGi là khung công tác mô đun Java. Nó không có bất kỳ sự cạnh tranh đáng tin cậy nào trong miền này. Bất kỳ ứng dụng nào cũng có thể hưởng lợi từ việc mô đun hơn, nhưng mô đun không phải là miễn phí. Nó dễ dàng hơn để ném mọi thứ vào một trình nạp lớp khổng lồ và không nghĩ quá nhiều về các mối quan hệ của các thành phần của bạn. Nếu bạn quyết định thử OSGi, công cụ PDE tuyệt vời là một phần của Eclipse không hỗ trợ phát triển OSGi không được Eclipse nhắm mục tiêu và làm cho nó dễ dàng hơn nhiều khi làm việc với OSGi.

1

ý kiến ​​cá nhân của tôi là OSGi mang lại đau nhiều hơn lợi ích. Nếu bạn thực sự cần một ứng dụng có thể cắm được, bạn có thể bắt đầu sử dụng OSGi, nhưng bạn cần phải viết mã theo cách có thể cắm được, điều không đơn giản chút nào (ngay cả khi cài đặt một plugin trong nhật thực nó đề nghị khởi động lại nhật thực) Tôi đã phát triển hai dự án tại nơi làm việc bằng OSGi, nó rất chậm khi bắt đầu dự án bởi vì bạn cần bọc rất nhiều thư viện công cộng và không phải tất cả chúng đều có thể quấn được, vì bạn có thể gặp phải một ClassNotDefoundError tại thời gian chạy vì các vấn đề của trình nạp lớp khi làm việc với các đối tượng proxy. Tất cả các mô đun mà chúng tôi có trong các dự án sử dụng OSGi có thể đạt được bằng cách sử dụng chỉ maven, khi làm việc với OSGi không ai ép buộc bạn viết nhiều gói hạt mịn, nếu bạn muốn bạn có thể viết ứng dụng lỗ trong một bó.

Nếu chúng ta nói về việc mất liên kết giữa các thành phần, nó có thể đạt được bằng cách sử dụng tự động nối dây từ khung tiêm phụ thuộc vào lõi lò xo hoặc google-guice.

3

Trải nghiệm cá nhân (2 năm) của tôi với OSGI là hóa đơn kỹ thuật vượt quá lợi ích chức năng theo đơn đặt hàng của cường độ.

Tôi đã gặp phải các trường hợp là bạn sẽ phải tạo/chỉnh sửa 25 tệp pom để triển khai mô hình một lớp lót!
Thiết kế đóng vai trò quan trọng, nhưng tôi cảm thấy khó khăn khi các nhà phát triển trở thành chuyên gia trong các chủ đề (như maven) không ảnh hưởng đến giá trị của khách hàng.
Hơn nữa, cách tiếp cận này không đối phó tốt với Agile. Trong thực tế, nó sẽ là một sự phù hợp tuyệt vời cho ... Waterfall
Đó là tất cả về IMHO tập trung chính của bạn. Phân phối so với các mẫu xây dựng.

Tóm lại, OSGI không phải là điều xấu, nhưng nó là không phù hợp nhất với các nhóm nhỏ và thời gian nhanh chóng để tiếp thị.

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