2014-05-19 17 views
5

Tôi biết có rất nhiều câu hỏi về chủ đề này. Nhưng chúng chủ yếu là về bảo tồn trạng thái của các lớp và các biến.Tải lại các lớp trong thời gian chạy JVM

Tôi muốn làm cho ứng dụng của mình tải phiên bản mới nhất (tất cả được đóng gói trong một cái bình) và tự khởi động lại.

Ứng dụng của tôi sử dụng hàm main() giống như điểm bắt đầu, vì vậy tôi chỉ khởi tạo một lớp và toàn bộ ứng dụng bắt đầu từ đó. Điều đó khiến tôi suy nghĩ. Tôi có thể dừng toàn bộ ứng dụng trong main(). Ghi đè lên các jar cũ và sau đó JVM có thể, về mặt lý thuyết, tải lại tất cả các lớp ngoại trừ lớp chứa main() và main sẽ khởi tạo lại mọi thứ và chạy nó.

Điều này có quá phức tạp không? Tôi có nên chỉ sử dụng một lọ bootstrap mà chỉ xử lý tung ra của jar nói và tải về phiên bản mới nhất của nó.

+4

Tập lệnh trình bao khởi động có thể là đơn giản nhất. –

+0

Bạn có muốn thay đổi bình khi đang chạy không? và không muốn khởi động lại JVM? – Vipin

+0

từ dự đoán của tôi, ít nhất bạn sẽ cần một) các lọ khác nhau cho lớp chính của bạn và các lớp có thể nạp lại b) chỉ sử dụng sự phản chiếu trong lớp chính của bạn c) nhiều khả năng một ClassLoader khác nhau cho jar nạp lại được – EasterBunnyBugSmasher

Trả lời

-3

Trong hầu hết các ứng dụng java commertial tự động cập nhật gần như luôn luôn luôn có ứng dụng khởi động kiểm soát việc thực hiện ứng dụng chính. Tôi chắc chắn có rất nhiều ví dụ về điều này là tốt.

0

Tôi sẽ xem xét sử dụng vùng chứa OSGi. Có rất nhiều triển khai trên không, nhẹ, chi phí thấp ở đây như Apache Felix hoặc Eclipse Equinox. Nhiều máy chủ ứng dụng Java được xây dựng trên một hạt nhân OSGi. Nó cho phép bạn dễ dàng trao đổi nóng toàn bộ các lọ (bó) hoặc thậm chí ít hơn các đơn vị chi tiết (tính năng) tại thời gian chạy với nỗ lực gần như không có.

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