เส้นทางใหม่ของ 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 ไปพัฒนาต่อ ต้องเลือกระหว่าง
การเปลี่ยนชื่อ 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
Comments
แต่การเลือกครั้งนี้ก็อาจทำให้คนหั่นหาไปสนใจ .NET มากกว่าไหมเพราะเริ่มต้นใหม่เหมือนกัน แถมฝั่งนั้นเจ้าขอโปรดักส์อย่างไมโครซอฟท์ก็ช่วยผลักดันเต็มที่ แทบจะเอา .NET ตัวเก่ามารันได้เกือบครบแล้ว ถ้าจะเริ่มใหม่ไป .NET ก็มีข้อดีอย่าง Proformance ก็ดีกว่า ระบบก็ทันสมัยกว่า เชื่อมต่อกับโปรดักส์ของไมโครซอฟท์ และเจ้าอื่นได้ง่ายกว่า แม้แต่ IDE ยังดีกว่า ชีวิตอาจจะดีกว่านะ
ปล. แค่ ASP.NET เชื่อมกับ Azure แล้วในร่วมกับ Application Insight สำหรับผมสาย Dev ก็กินขาดแบบโคตรๆ Track การทำงานได้ทุก Event ทุก Error ดูรายละเอียดแต่ function ที่ทำงานแถมวัด Performance ให้เสร็จสับว่าไปช้าที่ส่วนไหน แก้ไขปัญหาความล่าช้าได้ทันที
มันก็ไม่เหมือนเริ่มต้นใหม่นะครับ แค่เปลี่ยน namespce จาก javax -> Jakarta แค่นั้นเอง replace ทีเดียวก็หมดล่ะ เพียงแค่ว่า ถ้า app ที่ส่งให้คนภายนอกใช้ จะไม่สามารถระบุได้ว่า คนใช้ runtime ตัวไหน อาจจะต้อง เบิ้ล class โดยตัวนึง import jakarta อีกตัว import javax
ถ้าเป็น lib ที่คนอื่นเขาเลิกพัฒนาแล้วก็นรกแตกเลยนะครับ...
อาจจะเริ่มหันไปหาทางเลือกเช่น Golang, .Net Core มากขึ้น
Java มันหมดอนาคตไปตั้งแต่โดน Oracle ซื้อไปแล้วหละครับ
ความล้มเหลว คือจุดเริ่มต้นสู่ความหายนะ มีผลกระทบมากกว่าแค่เสียเงิน เวลา อนาคต และทรัพยากรที่เสียไป - จงอย่าล้มเหลว