Hotswap dan alternatifnya?

15

Sejak awal kehidupan kampus saya, saya telah menggunakan Java dan masalah terbesar yang kami miliki benar-benar kurang produktif daripada bahasa lain yang ditafsirkan. Semua orang yakin bahwa java adalah salah satu bahasa kompilasi terbaik.

Namun, baik Sun maupun Oracle tidak berupaya cukup untuk menyelesaikan masalah ini. Salah satu masalahnya adalah, tentu saja, reload kelas.

Upaya terbaru dari komunitas untuk mengatasi masalah ini adalah proyek DaVinci Hotswap , JRebel , PlayFramework . Namun, pada saat penulisan ini mereka masih belum dewasa (imo) dan asli. Beberapa dari mereka belum siap untuk perusahaan, beberapa dari mereka tidak kompatibel dengan semua IDE, beberapa dari mereka adalah proyek universal yang belum matang. Peta jalan dan bahkan pengembang Java siap sudah siap, tetapi komunitas Java masih tidak memiliki solusi untuk memuat ulang kelas terbang.

Apakah begitu sulit bagi Oracle untuk berusaha menyelesaikan masalah ini? Mengapa pemuatan kelas belum diterapkan secara asli?

Ozgur
sumber
2
Sebenarnya JRebel sepenuhnya siap untuk perusahaan dan memiliki dukungan IDE yang cukup bagus, meskipun itu tidak gratis.
CarlosZ
@CarlosZ Benarkah? Saya telah menggunakan IntelliJ IDEA dengan JRebel dari versi beta pertama ke seri 3.x. Alih-alih "ini", Anda harus menggunakan "itu". Di forum untuk setiap rilis, Anda akan melihat banyak masalah terkait plugin intelliJ. Tapi pengalaman terburuknya adalah masalah debugging. Debugger bisa terhubung sangat terlambat. Dan Kami memiliki masalah yang luar biasa. Sebagai pengguna intellJ saya memiliki pengalaman konkret tentang JRebel di IDEA. Dan tentu saja membayar uang adalah masalah lain juga.
@CarlosZ Ini benar - benar sebuah pertanyaan, saya ingin tahu mengapa sulit untuk mengimplementasikan pemuatan kelas di java secara asli.

Jawaban:

4

Bagaimana dengan JEE / J2EE? Ini pertama kali dirilis 12 tahun yang lalu. Ini didukung langsung menjadi Sun / Oracle dan banyak vendor lainnya.

Bagaimana dengan OSGi? Rilis pertama hampir 11 tahun yang lalu. Eclipse (sebuah IDE) dibangun di atasnya, Glassfish dari Sun / Oracle dan Apache Felix menggunakannya secara luas. Anda dapat menggunakannya dengan Spring-OSGi.

Itu belum didukung secara asli di Java SE karena aplikasi perusahaan sengaja didukung oleh server aplikasi sebagai produk terpisah.

Peter Lawrey
sumber
@ Peter Lawrey 1) Lawrey Mengenai J2EE apakah ada solusi konkret? Saya tidak bisa melihat maksud Anda? 2) Untuk memuat ulang kelas, apakah menurut Anda OSGI harus digunakan? Bagaimana dengan Jigsaw? Bahkan di level JCR, masih belum ada konsensus :). OSGI menangani bidang yang sangat berbeda dari pemuatan kelas. 3) Saya tidak dapat memahami bagian JavaSE, dapatkah Anda menjelaskan lebih banyak? Dan harap dicatat bahwa proyek DaVinci HotSwap disponsori oleh Oracle. Itu berarti, setidaknya bagi saya, mereka juga ingin solusi seperti itu.
Itu tergantung pada apa yang Anda harapkan dari hot swap untuk dilakukan. Jika Anda ingin hot swap untuk debugging, Anda telah dapat melakukan ini selama beberapa waktu. Namun untuk solusi perusahaan yang kuat, hot swap seperti ini tidak tepat dan hanya rilis terkontrol yang sesuai. Dalam hal ini JEE dan OSGi memungkinkan Anda untuk memperbarui aplikasi yang berjalan yang memiliki banyak manfaat yang sama tetapi dengan kontrol yang Anda harapkan dari lingkungan produksi. Misalnya, dalam wadah OSGi saya, saya dapat menghapus kelas dan menggantinya dengan versi yang lebih baru tanpa menghentikan aplikasi. Apa yang Anda butuhkan yang tidak dilakukan OSGi?
Peter Lawrey
1) Implementasi referensi JEE / J2EE mungkin menjadi tempat untuk memulai, tetapi ada banyak yang lebih populer, lebih mudah untuk menggunakan JEE. Maksud saya adalah Anda dapat mengganti kode dalam sistem yang sedang berjalan. Apa lagi yang Anda butuhkan dalam lingkungan produksi / terkontrol.
Peter Lawrey
1
2) Memuat ulang kelas adalah satu-satunya hal yang saya gunakan untuk OSGi. Apa yang Anda lihat sebagai penggunaan utama untuk OSGi?
Peter Lawrey
3) Inti dari JEE adalah ini adalah ruang untuk mendukung aplikasi perusahaan. JSE adalah platform dasar yang dapat digunakan untuk JEE atau aplikasi lain.
Peter Lawrey
2

Coba ini: http://www.zeroturnaround.com/blog/reloading_java_classes_401_hotswap_jrebel/

Ada beberapa masalah kompleks yang terlibat. Saya sebenarnya tidak mengetahui adanya solusi di luar sana (untuk Java atau tidak) yang melakukan perubahan struktural pada entitas stateful. Bahasa dinamis seperti Ruby atau PHP tidak benar-benar melakukan itu, saya tidak yakin tentang Erlang, tapi saya pikir itu juga akan kehilangan status.

Jevgeni Kabanov
sumber