Tags:
Node Thumbnail

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

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

No Description

แกนกลางของปัญหานี้เกิดจากการระบุชื่อแพ็กเกจ 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

Get latest news from Blognone

Comments

By: Hadakung
iPhoneWindows PhoneAndroidWindows
on 6 May 2019 - 00:15 #1108701

แต่การเลือกครั้งนี้ก็อาจทำให้คนหั่นหาไปสนใจ .NET มากกว่าไหมเพราะเริ่มต้นใหม่เหมือนกัน แถมฝั่งนั้นเจ้าขอโปรดักส์อย่างไมโครซอฟท์ก็ช่วยผลักดันเต็มที่ แทบจะเอา .NET ตัวเก่ามารันได้เกือบครบแล้ว ถ้าจะเริ่มใหม่ไป .NET ก็มีข้อดีอย่าง Proformance ก็ดีกว่า ระบบก็ทันสมัยกว่า เชื่อมต่อกับโปรดักส์ของไมโครซอฟท์ และเจ้าอื่นได้ง่ายกว่า แม้แต่ IDE ยังดีกว่า ชีวิตอาจจะดีกว่านะ
ปล. แค่ ASP.NET เชื่อมกับ Azure แล้วในร่วมกับ Application Insight สำหรับผมสาย Dev ก็กินขาดแบบโคตรๆ Track การทำงานได้ทุก Event ทุก Error ดูรายละเอียดแต่ function ที่ทำงานแถมวัด Performance ให้เสร็จสับว่าไปช้าที่ส่วนไหน แก้ไขปัญหาความล่าช้าได้ทันที

By: iamfalan
iPhoneAndroidWindows
on 6 May 2019 - 08:50 #1108716 Reply to:1108701

มันก็ไม่เหมือนเริ่มต้นใหม่นะครับ แค่เปลี่ยน namespce จาก javax -> Jakarta แค่นั้นเอง replace ทีเดียวก็หมดล่ะ เพียงแค่ว่า ถ้า app ที่ส่งให้คนภายนอกใช้ จะไม่สามารถระบุได้ว่า คนใช้ runtime ตัวไหน อาจจะต้อง เบิ้ล class โดยตัวนึง import jakarta อีกตัว import javax

By: Hadakung
iPhoneWindows PhoneAndroidWindows
on 6 May 2019 - 22:59 #1108807 Reply to:1108716

ถ้าเป็น​ lib​ ที่คนอื่นเขาเลิกพัฒนาแล้วก็นรกแตกเลยนะครับ...

By: Sh0ckWaveZer0
iPhoneWindows
on 6 May 2019 - 10:18 #1108722
Sh0ckWaveZer0's picture

อาจจะเริ่มหันไปหาทางเลือกเช่น Golang, .Net Core มากขึ้น

By: IDCET
Contributor
on 7 May 2019 - 08:33 #1108829

Java มันหมดอนาคตไปตั้งแต่โดน Oracle ซื้อไปแล้วหละครับ