Oracle เจรจา Eclipse ไม่ลงตัว แอพเก่าของ Java EE จะรันบน Jakarta EE โดยตรงไม่ได้

by mk
5 May 2019 - 16:15

เส้นทางใหม่ของ Java EE เริ่มต้นตั้งแต่ปี 2017 เมื่อ Oracle ตัดสินใจยก Java EE ให้ Eclipse Foundation ดูแล ภายใต้ชื่อแบรนด์ใหม่ว่า Jakarta EE เพราะ Oracle ยังถือเครื่องหมายการค้า Java อยู่ (Java SE ยังเป็นของ Oracle)

ตอนนี้โครงการ Jakarta EE มีโลโก้ใหม่และเว็บไซต์ของตัวเองเป็นที่เรียบร้อย แต่ก็เจออุปสรรคสำคัญที่จะทำให้แอพพลิเคชันที่เขียนบน Java EE ในอดีต ไม่สามารถรันบน Jakarta EE ในอนาคตได้

แกนกลางของปัญหานี้เกิดจากการระบุชื่อแพ็กเกจ javax.* ที่ใช้ในโลกของ Java EE มาโดยตลอด 20 ปีที่ผ่านมา (Java EE ออกเวอร์ชันแรกในปี 1999 พอดี สมัยนั้นยังใช้ชื่อ J2EE) แอพพลิเคชันทุกตัวที่เขียนบน Java EE ต่างต้องอ้างชื่อ namespace ขึ้นต้นด้วย javax ทั้งหมด

ปัญหาคือชื่อ javax เป็นกรรมสิทธิ์ของ Oracle และ Oracle ก็อนุญาตให้โครงการ Jakarta EE สามารถใช้ชื่อ javax ได้ ตราบเท่าที่โครงการ Jakarta EE ไม่ดัดแปลงแก้ไขแพ็กเกจ javax ใดๆ เพียงกรณีเดียวเท่านั้น

นั่นแปลว่าโครงการ Jakarta EE ที่เปรียบเสมือนการ fork ซอร์สโค้ดของ Java EE ไปพัฒนาต่อ ต้องเลือกระหว่าง

  • ไม่ปรับปรุงแก้ไขแพ็กเกจ javax อีกเลย เพื่อรักษาความเข้ากันได้กับแอพพลิเคชันในอดีต (backward compatibility) ข้อเสียคือแพ็กเกจ javax จะไม่ถูกพัฒนาใดๆ อีก
  • ปรับปรุงแก้ไขแพ็กเกจ javax ให้เข้ากับยุคสมัย แล้วเปลี่ยนไปใช้ชื่อใหม่ jakarta.* ซึ่งจะสูญเสียความเข้ากันได้กับแอพพลิเคชันเก่าจำนวนมหาศาล

การเปลี่ยนชื่อ namespace จาก javax.* เป็น jakarta.* จะทำให้แอพพลิเคชันเก่าต้องถูกแก้ไขซอร์สโค้ดเพื่อเปลี่ยนชื่อตามทั้งหมด ไม่สามารถนำไปรันบน Jakarta EE ได้ตรงๆ อีกแล้ว จุดเด่นของแพลตฟอร์ม Java ที่ว่า Write Once Run Anywhere ก็จะไม่เป็นความจริงอีกต่อไป

สถานะตอนนี้ของโครงการ Jakarta EE คือจะรีบออก Jakarta EE 8 ที่เข้ากันได้กับ Java EE 8 ที่ออกในปี 2017 โดยไม่มีการเปลี่ยนแปลงทั้งในแง่ของ namespace และ API (ส่วนใหญ่คือเปลี่ยนข้อความที่อ้างถึง Java เป็น Jakarta ด้วยซ้ำ) และ Jakarta EE 8 ถือเป็นรุ่น LTS ที่มีอายุซัพพอร์ตยาวนานไปจนถึงปี 2028 ดังนั้น แอพพลิเคชันเดิมของ Java EE 8 จะสามารถรันบน Jakarta EE 8 ได้อย่างไม่มีปัญหาไปอีกนานเกือบสิบปี

แต่เมื่อโครงการ Jakarta EE เริ่มพัฒนาเวอร์ชันใหม่ในแนวทางของตัวเองที่ไม่ต้องอิงกับ Oracle (เช่น Jakarta EE 9 รุ่นถัดไป ซึ่งยังไม่มีแผนว่าจะออกเมื่อไร) ก็จะเกิดปัญหาขึ้นมาทันทีหากเปลี่ยน namespace เพราะแอพพลิเคชันเดิมจะไม่สามารถรันบน Jakarta EE 9 ได้

ตอนนี้ Eclipse Foundation ยังไม่มีความชัดเจนในเรื่องนี้ (ต้องรอโหวตผ่านกระบวนการภายในขององค์กร) แต่ก็มีนักพัฒนาบางส่วนเรียกร้องให้ "หัก" เปลี่ยนชื่อแพ็กเกจทั้งหมดจาก javax เป็น jakarta ยอมพังครั้งเดียวแล้วสบายไปตลอดในอนาคตเช่นกัน

ที่มา - Eclipse Foundation, Oracle, Jakarta EE, Payara Blog

Blognone Jobs Premium