Hotswap และทางเลือก?


15

ตั้งแต่วันแรกของชีวิตในวิทยาลัยของฉันฉันใช้ Java และปัญหาที่ใหญ่ที่สุดที่เรามีคือการผลิตน้อยกว่าภาษาตีความอื่น ๆ ทุกคนมั่นใจว่า java เป็นหนึ่งในภาษาที่รวบรวมดีที่สุด

อย่างไรก็ตาม Sun หรือ Oracle ไม่ได้ใช้ความพยายามอย่างเพียงพอในการแก้ปัญหานี้ หนึ่งในปัญหาคือการโหลดคลาสใหม่

ความพยายามล่าสุดจากชุมชนเพื่อแก้ปัญหานี้เป็นโครงการ DaVinci hotswap , JRebel , PlayFramework อย่างไรก็ตามในช่วงเวลาของการเขียนนี้พวกเขายังไม่สุก (IMO) และพื้นเมือง บางคนไม่พร้อมสำหรับองค์กรบางคนไม่สามารถใช้งานร่วมกับ IDE ทั้งหมดได้บางส่วนเป็นโครงการสากลที่ยังไม่บรรลุนิติภาวะ โรดแม็พโรดเดอร์และแม้แต่ผู้พัฒนา Java ที่พร้อมใช้งานแล้ว แต่ชุมชน Java ยังไม่มีวิธีแก้ปัญหาสำหรับการรีโหลดคลาส fly

ออราเคิลพยายามอย่างหนักเพื่อแก้ไขปัญหานี้หรือไม่? ทำไมการโหลดคลาสยังไม่ได้รับการใช้งานอย่างเป็นทางการ?


2
ที่จริงแล้ว JRebel นั้นพร้อมสำหรับองค์กรอย่างสมบูรณ์และมีการสนับสนุน IDE ที่ดีงามแม้ว่ามันจะไม่ฟรี
Carlos Carlos

@CarlosZ จริงเหรอ? ฉันใช้ IntelliJ IDEA กับ JRebel จากซีรีย์แรกไปจนถึงซีรีย์ 3.x แทนที่จะเป็น "สิ่งนี้" คุณต้องใช้ "สิ่งนั้น" ที่ฟอรัมสำหรับแต่ละรุ่นคุณจะเห็นปัญหามากมายเกี่ยวกับปลั๊กอิน intelliJ แต่ประสบการณ์ที่เลวร้ายที่สุดคือการแก้ไขข้อบกพร่อง ดีบักเกอร์สามารถเชื่อมต่อช้ามาก และเรามีปัญหาอย่างมาก ในฐานะผู้ใช้ IntellJ ฉันมีประสบการณ์ที่เป็นรูปธรรมเกี่ยวกับ JRebel ใน IDEA และแน่นอนว่าการจ่ายเงินก็เป็นอีกประเด็นหนึ่งเช่นกัน

@CarlosZ มันเป็นคำถามจริง ๆฉันอยากรู้ว่าทำไมมันยากที่จะใช้ class reload ในภาษาจาวา

คำตอบ:


4

แล้ว JEE / J2EE ล่ะ นี่เปิดตัวครั้งแรกเมื่อ 12 ปีก่อน สิ่งนี้ได้รับการสนับสนุนโดยตรงจาก Sun / Oracle และผู้ค้ารายอื่น ๆ

แล้ว OSGi ล่ะ? รุ่นแรกของมันคือเกือบ 11 ปีที่ผ่านมา Eclipse (IDE) ถูกสร้างขึ้นบน Glassfish จาก Sun / Oracle และ Apache Felix ใช้อย่างกว้างขวาง คุณสามารถใช้กับ Spring-OSGi

ยังไม่ได้รับการสนับสนุนใน Java SE เนื่องจากแอปพลิเคชันองค์กรได้รับการสนับสนุนโดยเจตนาโดยแอปพลิเคชันเซิร์ฟเวอร์เป็นผลิตภัณฑ์แยกต่างหาก


@ Peter Lawrey 1) Lawrey เกี่ยวกับ J2EE มีทางออกที่เป็นรูปธรรมหรือไม่? ฉันไม่เห็นจุดของคุณ? 2) ในการโหลดคลาสคุณคิดว่าควรใช้ OSGI หรือไม่ จิ๊กซอว์ล่ะ? แม้ในระดับ JCR ก็ยังไม่มีฉันทามติ :) OSGI กำลังจัดการกับพื้นที่ที่แตกต่างจากการโหลดคลาส 3) ฉันไม่เข้าใจส่วน JavaSE คุณช่วยอธิบายอีกเล็กน้อยได้ไหม? และโปรดทราบว่าโครงการ DaVinci HotSwap ได้รับการสนับสนุนโดย Oracle หมายความว่าอย่างน้อยสำหรับฉันพวกเขายังกระตือรือร้นที่จะแก้ปัญหาเช่นนี้

ขึ้นอยู่กับสิ่งที่คุณคาดว่าจะได้จากการแลกเปลี่ยนความร้อน หากคุณต้องการแลกเปลี่ยนความร้อนสำหรับการดีบักคุณสามารถทำเช่นนี้ได้ในบางครั้ง อย่างไรก็ตามสำหรับโซลูชันระดับองค์กรที่มีประสิทธิภาพการแลกเปลี่ยนความร้อนในลักษณะนี้ไม่เหมาะสมและมีเพียงการควบคุมที่ปล่อยออกมาเท่านั้น ในกรณีนี้ JEE และ OSGi อนุญาตให้คุณอัปเดตแอปพลิเคชั่นที่ทำงานซึ่งมีประโยชน์มากเหมือนกัน แต่ด้วยการควบคุมที่คุณคาดหวังจากสภาพแวดล้อมการใช้งานจริง ตัวอย่างเช่นในคอนเทนเนอร์ OSGi ของฉันฉันสามารถลบคลาสและแทนที่ด้วยเวอร์ชันที่ใหม่กว่าโดยไม่ต้องหยุดแอปพลิเคชัน คุณต้องการอะไรที่ OSGi ไม่ทำ?
Peter Lawrey

1) การดำเนินการอ้างอิง JEE / J2EE อาจเป็นจุดเริ่มต้น แต่มี JEE / J2 นิยมมากขึ้นใช้งานง่ายขึ้น จุดของฉันคือคุณสามารถแทนที่รหัสในระบบที่กำลังทำงานอยู่ คุณต้องการอะไรอีกในสภาพแวดล้อมการผลิต / การควบคุม
Peter Lawrey

1
2) การโหลดคลาสซ้ำเป็นสิ่งเดียวที่ฉันใช้ OSGi สิ่งใดที่คุณเห็นว่าเป็นการใช้หลักสำหรับ OSGi
Peter Lawrey

3) จุดรวมของ JEE คือพื้นที่สำหรับการสนับสนุนแอปพลิเคชันระดับองค์กร JSE เป็นแพลตฟอร์มพื้นฐานที่สามารถใช้สำหรับ JEE หรือแอปพลิเคชันอื่น ๆ
Peter Lawrey

2

ลองนี้: http://www.zeroturnaround.com/blog/reloading_java_classes_401_hotswap_jrebel/

มีปัญหาที่ซับซ้อนหลายอย่างที่เกี่ยวข้อง จริง ๆ แล้วฉันไม่ได้ตระหนักถึงการแก้ปัญหาใด ๆ ที่นั่น (สำหรับ Java หรือไม่) ที่จะทำการเปลี่ยนแปลงโครงสร้างหน่วยงานรัฐ ภาษาไดนามิกเช่น Ruby หรือ PHP ไม่ได้ทำอย่างนั้นจริง ๆ ฉันไม่แน่ใจเกี่ยวกับ Erlang แต่ฉันคิดว่ามันจะเสียสถานะด้วย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.