Hotswap và lựa chọn thay thế?


15

Kể từ những ngày đầu của cuộc sống đại học, tôi đã sử dụng Java và vấn đề lớn nhất mà chúng ta gặp phải là hoàn toàn kém năng suất hơn các ngôn ngữ được giải thích khác. Tất cả mọi người chắc chắn rằng java là một trong những ngôn ngữ được biên dịch tốt nhất.

Tuy nhiên, cả Sun và Oracle đều không nỗ lực hết sức để giải quyết vấn đề này. Tất nhiên, một trong những vấn đề là tải lại lớp.

Những nỗ lực mới nhất từ ​​cộng đồng để giải quyết vấn đề này là dự án DaVinci Hotswap , JRebel , PlayFramework . Tuy nhiên, tại thời điểm viết bài này, họ vẫn chưa trưởng thành (imo) và bản địa. Một số trong số chúng chưa sẵn sàng cho doanh nghiệp, một số trong số chúng không tương thích với tất cả các IDE, một số trong số chúng là các dự án universtiy chưa trưởng thành. Bản đồ đường và thậm chí Java đã sẵn sàng cho nhà phát triển đã sẵn sàng, nhưng cộng đồng Java vẫn chưa có giải pháp cho việc tải lại lớp bay.

Có quá khó để Oracle nỗ lực giải quyết vấn đề này không? Tại sao tải lại lớp chưa được thực hiện nguyên bản?


2
Trên thực tế, JRebel hoàn toàn sẵn sàng cho doanh nghiệp và có hỗ trợ IDE khá tốt, mặc dù nó không miễn phí.
CarlosZ

@CarlosZ Thật sao? Tôi đã sử dụng IntelliJ IDEA với JRebel từ loạt beta đầu tiên đến 3.x. Thay vì "cái này", bạn phải sử dụng "cái đó". Tại diễn đàn cho mỗi bản phát hành, bạn sẽ thấy nhiều vấn đề liên quan đến plugin intelliJ. Nhưng kinh nghiệm tồi tệ nhất là gỡ lỗi. Trình gỡ lỗi có thể kết nối rất muộn. Và chúng tôi đã có những vấn đề rất lớn. Là một người dùng intellJ, tôi có kinh nghiệm cụ thể về JRebel trong IDEA. Và tất nhiên trả tiền cũng là một vấn đề khác.

@CarlosZ Đó là một câu hỏi thực sự , tôi tò mò tìm hiểu tại sao khó thực hiện tải lại lớp trong java nguyên bản.

Câu trả lời:


4

Còn JEE / J2EE thì sao? Điều này đã được phát hành lần đầu tiên 12 năm trước. Điều này được hỗ trợ trực tiếp là Sun / Oracle và nhiều nhà cung cấp khác.

Còn về OSGi thì sao? Bản phát hành đầu tiên của nó là gần 11 năm trước. Eclipse (một IDE) được xây dựng trên nó, Glassfish từ Sun / Oracle và Apache Felix sử dụng nó rộng rãi. Bạn có thể sử dụng nó với Spring-OSGi.

Nó không được hỗ trợ nguyên bản trong Java SE vì các ứng dụng doanh nghiệp được các máy chủ ứng dụng hỗ trợ một cách có chủ ý như các sản phẩm riêng biệt.


@Peter Lawrey 1) Lawrey Về J2EE có giải pháp cụ thể nào không? Tôi không thể nhìn thấy quan điểm của bạn? 2) Để tải lại lớp, bạn có nghĩ rằng nên sử dụng OSGI không? Thế còn ghép hình thì sao? Ngay cả ở cấp độ JCR, vẫn không có sự đồng thuận :). OSGI đang giải quyết một khu vực rất khác so với tải lại lớp. 3) Tôi không thể hiểu phần JavaSE, bạn có thể giải thích thêm một chút không? Và xin lưu ý rằng dự án DaVinci HotSwap được tài trợ bởi Oracle. Nó có nghĩa là, ít nhất là đối với tôi, họ cũng háo hức như một giải pháp.

Nó phụ thuộc vào những gì bạn mong đợi trao đổi nóng để làm. Nếu bạn muốn trao đổi nóng để gỡ lỗi, bạn đã có thể làm điều này một thời gian. Tuy nhiên, đối với các giải pháp doanh nghiệp mạnh, hoán đổi nóng về bản chất này là không phù hợp và chỉ có các bản phát hành có kiểm soát. Trong trường hợp này, JEE và OSGi cho phép bạn cập nhật các ứng dụng đang chạy có cùng lợi ích nhưng với sự kiểm soát mà bạn mong đợi từ môi trường sản xuất. Ví dụ, trong bộ chứa OSGi của tôi, tôi có thể xóa các lớp và thay thế chúng bằng các phiên bản mới hơn mà không cần dừng ứng dụng. Bạn cần gì mà OSGi không làm?
Peter Lawrey

1) Triển khai tham chiếu JEE / J2EE có thể là một nơi để bắt đầu, nhưng có nhiều JEE phổ biến hơn, dễ sử dụng hơn. Quan điểm của tôi là bạn có thể thay thế mã trong một hệ thống đang chạy. Bạn cần gì hơn trong một môi trường sản xuất / kiểm soát.
Peter Lawrey

1
2) Tải lại các lớp là những thứ duy nhất tôi sử dụng OSGi cho. Bạn thấy gì khi sử dụng chính cho OSGi?
Peter Lawrey

3) Toàn bộ quan điểm của JEE là đây là không gian hỗ trợ cho các ứng dụng doanh nghiệp. JSE là nền tảng cơ bản có thể được sử dụng cho JEE hoặc các ứng dụng khác.
Peter Lawrey

2

Hãy thử điều này: http://www.zeroturnaround.com/blog/reloading_java_groupes_401_hotswap_jrebel/

Có nhiều vấn đề phức tạp liên quan. Tôi thực sự không biết bất kỳ giải pháp nào ngoài đó (cho Java hay không) thực hiện thay đổi cấu trúc đối với các thực thể có trạng thái. Các ngôn ngữ động như Ruby hoặc PHP không thực sự làm điều đó, tôi không chắc về Erlang, nhưng tôi nghĩ nó cũng sẽ mất trạng thái.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.