2011-10-06 24 views
10

Từ những gì tôi hiểu, trong OSGi bạn có thể cập nhật các jars khi chạy mà không cần khởi động lại máy chủ. Nhưng jboss cũng có triển khai nóng, trong đó toàn bộ tai được cập nhật và máy chủ vẫn đang chạy.OSGi vs jboss hot deploy

Vì vậy, lợi ích của OSGi trong dự án java doanh nghiệp trong jboss là gì?

+0

Tôi chưa bao giờ nghe nói về việc triển khai lại thành công trong sản xuất trên máy chủ ứng dụng JEE (có tất cả họ đều yêu cầu bạn có thể làm điều đó, nhưng các lib bị hành vi xấu luôn chặn các trình nạp lớp cũ bị thu gom rác). http://stackoverflow.com/questions/5788862/how-do-you-update-your-java-ee-app-in-production/5887360 – earcam

Trả lời

9

Tôi tin rằng câu trả lời giống như mọi trường hợp sử dụng OSGi: mô đun và độ chi tiết cập nhật tốt hơn.

OSGi vượt xa so với việc cập nhật các bình khi chạy mà không cần khởi động lại máy chủ. Từ quan điểm của câu hỏi của bạn, nó đang cập nhật các bình khi chạy mà không cần khởi động lại ứng dụng .

Tôi thừa nhận tôi không biết triển khai EAR nóng cụ thể trong JBoss AS, nhưng trong mọi trường hợp, việc cập nhật EAR không thể được thiết kế để bảo toàn toàn bộ trạng thái của ứng dụng. Máy chủ vẫn đang chạy, nhưng về cơ bản bạn khởi động lại ứng dụng khi cập nhật. Mức độ mất nhà nước như vậy thực sự phụ thuộc vào cách bạn thiết kế ứng dụng của bạn, nhưng thực tế vẫn là bạn đang làm những điều đơn độc.

Với OSGi, đây không phải là trường hợp: ứng dụng được tạo thành từ một nhóm lớn các gói, mỗi ứng dụng được thiết kế để xử lý một phần riêng biệt của chức năng. Cách tiếp cận này cho phép triển khai nóng trong ứng dụng, vì khuôn khổ được thiết kế để xem xét hiệu ứng khởi động lại bất kỳ cái bình nào mang đến toàn bộ ứng dụng và để các lọ khác phản ứng một cách thích hợp. Điều đó cung cấp khả năng bảo toàn trạng thái ứng dụng nhiều nhất có thể.

Do đó, lợi ích của thiết kế OSGi trong trường hợp Doanh nghiệp là tính sáng tạo của ứng dụng. Không cần nhấn mạnh tầm quan trọng của điều đó. Thật vậy, có những trường hợp sử dụng khi ứng dụng có thể được khởi động lại an toàn. Nhưng OSGi theo ý kiến ​​của tôi là sự lựa chọn duy nhất thực sự mở rộng và duy trì được cho Java EE hiện nay. Thực tế là các máy chủ ứng dụng quan trọng nhất đã chuyển (hoặc đang đi đến) đến một thời gian chạy OSGi (và do đó đưa ra hỗ trợ ứng dụng OSGi) là bằng chứng về điều đó.

+0

không khởi động lại ứng dụng; lời giải thích tốt đẹp –

6

l10i đã viết: Với OSGi, đây không phải là trường hợp: ứng dụng được tạo thành một bộ bó lớn, mỗi ứng dụng được thiết kế để xử lý một phần riêng biệt của chức năng. Cách tiếp cận này cho phép triển khai nóng trong ứng dụng, vì khuôn khổ được thiết kế để xem xét hiệu ứng khởi động lại bất kỳ cái bình nào mang đến toàn bộ ứng dụng và để các lọ khác phản ứng một cách thích hợp. Điều đó cung cấp khả năng bảo toàn trạng thái ứng dụng nhiều nhất có thể.

Chỉ cần giải thích thêm về điều này một chút, các ứng dụng OSGi tốt nhất là các ứng dụng hướng dịch vụ tích hợp thông qua đăng ký dịch vụ OSGi. Đăng ký dịch vụ này là động, các dịch vụ có thể đến và đi bất cứ lúc nào và người tiêu dùng dịch vụ OSGi phản ứng với tính năng động này một cách thích hợp. Giả sử ứng dụng của bạn bao gồm một số gói, bao gồm gói sử dụng dịch vụ thanh toán (ví dụ: để xử lý thanh toán bằng thẻ tín dụng) và một gói khác cung cấp dịch vụ thanh toán đó. Nếu bạn thấy mình trong tình huống dịch vụ thanh toán cần được cập nhật (vì bạn có sửa chữa quan trọng hoặc có thể bạn đã tìm được nhà cung cấp rẻ hơn, v.v.), bạn có thể cập nhật dịch vụ thanh toán này mà không cần phải hạ người tiêu dùng xuống dịch vụ này. Để đạt được điều này, bạn có thể tự cập nhật gói dịch vụ thanh toán, nhưng tôi khuyên bạn nên cài đặt phiên bản mới của gói dịch vụ thanh toán cùng với phiên bản cũ trước. Điều này là có thể bởi vì OSGi cho phép nhiều phiên bản của cùng một gói cùng tồn tại. Sau đó, khi gói mới được thiết lập và chạy, bạn có thể xóa gói dịch vụ thanh toán cũ tại thời điểm đó người tiêu dùng sẽ tự động lật sang sử dụng gói dịch vụ mới, theo lịch sự đăng ký dịch vụ OSGi.

Kiến trúc như ví dụ trên thực sự mạnh mẽ và tuyệt vời để đảm bảo rằng các ứng dụng doanh nghiệp của bạn luôn hoạt động và có thể nhận ra bằng cách sử dụng dịch vụ OSGi kết hợp với khả năng tự động cài đặt, gỡ cài đặt hoặc cập nhật gói OSGi.

BTW có chi tiết hơn một chút so với ví dụ trên vì các gói cũng có thể được viết để sử dụng tất cả các dịch vụ của một loại cụ thể - điều tốt nhất cho bạn tùy thuộc vào trường hợp của bạn.

Có một số cách để sử dụng đăng ký dịch vụ OSGi, bạn có thể sử dụng nó với ServiceTracker API, mức này khá thấp. Trong hầu hết các trường hợp, bạn nên sử dụng một khung công tác cho dịch vụ này như Dịch vụ khai báo OSGi (DS), Kế hoạch chi tiết OSGi hoặc khung công tác khác. Trong hầu hết các trường hợp, các khung công tác này hoạt động thông qua việc tiêm và xử lý tính năng động của Registry Service OSGi cho bạn. Để biết thông tin về DS hoặc Kế hoạch chi tiết, hãy xem OSGi 4.2 Enterprise Specification.