2012-04-20 45 views
7

Tôi cần sử dụng lại mã ban đầu được phát triển cho một ứng dụng RCP Eclipse (ví dụ: đóng gói như gói Eclipse/OSGi) trong một servlet.Để nhúng OSGi vào thùng chứa servlet hoặc thùng chứa servlet trong OSGi?

Sau khi đọc rất nhiều bài đăng trên blog, bài viết, wiki và vân vân tôi đã kết thúc tại điểm mà tôi biết rằng:

  1. Một OSGi framework (Equinox trong trường hợp của tôi) có thể được nhúng vào trong một servlet container (Tomcat 7 trong trường hợp của tôi)
  2. hoặc Tomcat có thể được nhúng trong một khung công tác OSGi.

Equinox đề xuất tùy chọn thứ hai là dễ dàng hơn. Nhưng đối với sản xuất họ khuyên bạn nên 1. Tôi không chắc chắn lý do tại sao. Điều gì thực sự tốt hơn trong trường hợp nào và tại sao?

Tôi là người dùng Tomcat khá dày dạn, sẽ nhúng Tomcat vào thay đổi Equinox để quản lý nó nhiều? hay nói cách khác, những gì sẽ khác nhau trong Tomcat được nhúng trong Equinox?

Trả lời

5

Trước tiên, mã có bất kỳ phụ thuộc OSGi/Equinox nào ngoài tệp kê khai không? Nếu không, nó sẽ hoạt động tốt trong một Tomcat đơn giản.

Sự hiểu biết của tôi là việc nhúng Tomcat vào Equinox sẽ thay đổi việc quản lý nó rất nhiều. Bố cục thư mục của bạn bao gồm server.xml và catalina.sh sẽ biến mất. Thay vào đó, bạn sẽ quản lý một ứng dụng Equinox có thể thông qua cấu hình admin.

Thứ hai có hai mô hình lập trình và triển khai servlet cho OSGi. Đầu tiên là HttpService, trong đó bạn lập trình đăng ký các servlet và tài nguyên của mình (bạn cũng có thể thực hiện điều này thông qua một điểm mở rộng). Trong trường hợp này, ứng dụng của bạn chỉ là một tập hợp các gói. Tuy nhiên bạn không thể sử dụng bộ lọc. Thứ hai là một gói ứng dụng web (WAB) là một OSGified WAR.

+2

Tôi hoàn toàn quên, nếu bạn đang xem xét việc chạy Tomcat trong Equinox, bạn có thể sẽ muốn xem [Eclipse Virgo] (http://www.eclipse.org/virgo/) thay vì tự xây dựng nó . –

4

Apache Sling's maven-launchpad-plugin có thể tạo tệp chiến tranh nhúng khung OSGi (Apache Felix làm chuẩn, không chắc chắn nếu người khác được hỗ trợ) và tập hợp các gói mà bạn xác định. Có thể được sử dụng để chạy các ứng dụng OSGi trong Tomcat.

5

Chúng tôi đã thực hiện di chuyển ứng dụng web khá phức tạp sử dụng Jetty từ non-OSGi sang OSGi trên Equinox. Tôi đã tìm hiểu về một số điều chắc chắn có thể thúc đẩy quyết định của bạn theo cách này hay cách khác: - Nếu bạn chọn sử dụng OSGi làm khuôn khổ để chạy ứng dụng của mình và ví dụ: tùy chọn # 2, mọi thứ mà ứng dụng của bạn sử dụng sẽ phải là gói OSGi. Bất kỳ bên thứ ba hoặc bên thứ ba của thư viện thương mại. Nếu bạn sử dụng nhiều nguồn mở, thì việc tìm kiếm các gói rất dễ dàng. Hoặc nếu bạn không thể tìm thấy bó, bạn luôn có thể tự nhóm chúng lại bằng BNDTools. Tuy nhiên, cách tiếp cận này có thể mất nhiều thời gian để tìm ra tất cả các phụ thuộc thích hợp và các vấn đề về trình nạp lớp có thể yêu cầu hack xung quanh OSGi - Cách tiếp cận nhúng OSGi vào Tomcat, có vẻ như cách tiếp cận an toàn và dễ dàng hơn trên bề mặt. Mặc dù tôi không chắc chắn bạn sẽ nhận được lợi ích từ WAB trong trường hợp này.

BTW một trong những lợi ích thú vị của WAB là bạn có thể dễ dàng chia sẻ mã giữa WebApps, vì chúng được triển khai dưới dạng gói và bạn có thể chỉ cần xuất/nhập gói trên chúng. Một cái gì đó không thực sự có thể với việc triển khai không phải OSGi ngày hôm nay.

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