Chapter3.1: Java EE Features

สวัสดีครับ

จากบทที่แล้ว ผมหยอดไว้ว่า Java นั้น เก่งในการทำงานอยู่ 2 domain คือ

– Enterprise Web Application

– Server-Side Service

วันนี้เราจะมาขยายความกันครับ ว่าทำไม Java ถึงเก่งในเรื่องนี้

ส่วนคำถามว่า Java ทำไม ไม่เก่งในเรื่องอื่นๆ ก็เพราะ จากที่ได้เล่าไปในบทที่ 3 เรื่องยุคของคอมพิวเตอร์ ก็จะเข้าใจว่า Java เกิดขึ้นในระหว่างรอยต่อของยุค Client-Server สู่ยุค Web Technology

เมื่อเกิดในยุคการเปลี่ยนถ่ายพอดี ทำให้ framework หรือ library ที่ไม่เคยมีในภาษาเก่าๆเช่น C นั้น ถูกแก้ไขและพัฒนาไปบนภาษาใหม่ในยุคนั้นเช่น Java

ดังจะเห็นได้จาก principal ทั้ง 5 ของ Java ล้วนเป็นการแก้ไขข้อบกพร่องของ C ไม่ว่าจะเป็น

– Object-Oriented แท้ๆ ที่ไม่แหกกฏของ Java ซึ่งหาไม่ได้ใน C++

– การเป็น platform independent ที่ C ไม่มี

– การที่ให้ทำงานผ่าน JVM ทำให้คนไม่แตะต้อง machine โดยตรง ที่นำมาซึ่งคำว่า Robust (ถึก) and Secure (ปลอดภัย เพราะไม่ไปยุ่งกับ machine ตรงๆ)

– การที่ Dynamic และ Distributed ซึ่งคำนึงถึงการ scale ได้เมื่อโปรแกรมใหญ่ขึ้น (อันนี้จะอธิบายในบทที่ 4 นะจร๊ะ) โดย Java มี framework ให้เสร็จสรรพ แต่ถ้าเป็นภาษา C การ scale นั้นคงลำบากยิ่ง

– Multi-thread ใครเคยเขียน C แล้วต้องคุม critical resource เองคงจะรู้ว่ายากขนาดไหน แต่ถ้าไม่เคยเขียนก็ไม่ต้องไปเขียนมันหรอก ยกเว้นเป็นสาย OS หรือ machine ถ้าเป็นสายคุณชาย ที่เขียนแต่ application แบบผม การทำงาน multithread บน Java นั้น ง่ายยิ่งกว่าปลอกกล้วยเข้าปาก (อันนี้มี case study นิดนึงว่าตอนเรียน client-server ที่ต้องทำ proxy server อาจารย์ห้ามเขียน Java เพราะมันง่ายไป ต้องให้ไปเขียน c ซึ่งเราจัดการกับ process และ critical resource ก็ปวดหัวแล้ว)

จะเห็นได้ว่า Java เกิดในยุคเปลี่ยนถ่าย จาก client-server มาเป็น web technology ทำให้ภาษาเองพัฒนาข้อดีมาลบข้อด้อยเดิมของภาษา C ไป เพื่อให้เหมาะกับการพัฒนา web technology

แล้วจะไปเขียนใน domain อื่นทำไม ในเมื่อคนออกแบบเค้ามุ่งเน้นให้เขียนกับ web technology

ถ้ายังฝืนทำอยู่ก็คงเป็นพวก “รกอก”

แล้วเกี่ยวอะไรกับ Server-side Service,

ยุคที่เราเล่าไปนั้นมี 4ยุค ซึ่งเราอยู่ในยุคที่ 4 กันแล้ว ยุค Post-PC หรือว่า PC ไม่ให้คำตอบ

คนหันมาใช้ tablet และ smart phone กันมากขึ้น เพราะความคล่องตัว

ซึ่ง mobile devices พวกนี้ ก็ยังคงเรียกใช้งาน Web ได้ แต่ก็ไม่ค่อยเท่ห์นัก เพราะ 3G ที่ว่ามีอยู่จริง กลับมาๆขาดๆ ทำให้ mobile devices จำเป็นต้อง ทำงานแบบ offline ได้ และกลับมา sync เมื่อ online

ซึ่ง Web technology เดิมนั้น ออกแบบมาสำหรับ online เท่านั้น การทำงานแบบกึ่ง online กึ่ง offline จีงดูไม่ค่อยจะเหมาะกับ web technology

ถึงแม้นจะมี html5 ที่สนับสนุนการทำงานแบบนี้แล้วก็ตาม แต่การดึงศักยภาพของ mobile devices ให้ออกมาสูงสุดนั้น ยังคงเลือกใช้ native programming language จะดีกว่า

ถ้าต้องเขียน native programming language ก็เท่ากับย้อนยุคไปที่สมัย client-server หน่ะสิ แค่เปลี่ยนจาก PC มีสาย กลายเป็น mobile devices ไร้สาย?

ไม่หรอกครับ เนื่องจาก mobile devices นั้นมีขนาดเล็ก มีความจุน้อย พลังการประมวลผลไม่มาก เสียหายง่าย และที่สำคัญการเก็บ data สำคัญไว้ในอุปกรณ์เล็กๆนั้นไม่ “secure”

ทำให้ทุกคนบนโลก technology มองว่า mobile devices เป็นแค่ presentation layer ทำหน้าที่แค่แสดงผล ส่วนการประมวลผลนั้น จะยกให้กับ Cloud Server (หรือ server กลางนภากาศ ที่ผมเคยเขียนใน blog เก่า เมื่อ 3-4 ปีที่แล้ว)

เจ้า Platform กลางนภากาศ ที่กระจาย Server กลางนภากาศ ไปอยู่บนกลุ่มเมฆ internet มีการทำ back-up และ replicate กันมากมาย จนแทบถือว่า ไม่มีวันเจ๊ง (ถ้ามีตังกระจาย server) นี่แหละครับ คือ เทคโนโลยี Cloud Computing ที่เชื่อมต่อกับ Mobile Devices ต่างๆ และทำหน้าที่ประมวลผลและเก็บข้อมูล

กลับมาที่ Java…. !!!

ในเมื่อ Mobile Devices เพื่อดึงศักยภาพสูงสุด จึงเขียน native programming language แต่มันก็จำเป็นต้องเชื่อมต่อกับ Cloud Platform ที่ทำหน้าที่ประมวลผล และเก็บข้อมูล

ดังนั้น การประมวลผลข้อมูลบน platform ฝั่ง server ที่ต้องการ dynamic and distributed คือกระจายอยู่ได้ทุกที่และ replicate กันได้ ไม่มีวันล่ม (ถ้ามีตัง)  นอกจากนั้นยังทำงานเป็น multithread เพื่อรองรับหลายๆ mobile devices พร้อมกัน และไม่ยึดติดกับ platform ของ server (ซื้อ windows กากส์ๆ ถ้าหากไม่มีตัง หรือใช้ unix เทรพๆ มา run ก็ได้)

ด้วยความต้องการเหล่านี้ อะไรจะเหมาะยิ่งกว่าภาษา Java อีกหล่ะครับ?

ดังนั้น Server-side Service จึงเหมาะสมสำหรับ Java แค่เปลี่ยนจาก Web Technology กลายเป็นการคุยกับแบบ application-to-application ด้วยการใช้ Web Services ในการแลกเปลี่ยนข้อมูลระหว่าง programming language ที่แตกต่างกัน ก็แค่นั้นเอง

ว่ากันมายาว เข้าใจรึยังว่าจุดแข็งของ Java อยู่ตรงไหน?

จุดแข็งที่ว่าคือ Edition ใหญ่สุดของ Java ที่ชื่อว่า Java Enterprise Edition หรือ Java EE นั้นเอง

อย่างที่ผมเคยบอกไปแล้วว่า ถ้าเขียน Java แล้วไม่เขียน Java EE ก็แน่นอกและยกออกเหอะ

วันนี้เราจะพาไปดู Features หล่อๆ ของ Java EE กัน

ก่อนจะไปดู เล่าก่อนว่า Java EE กำหนด Spec ไว้ว่า application ที่จะทำงานบน Java EE นั้น ต้องทำงานบน Java EE Application Server หรือเรียกภาษาบ้านๆว่า Server สำหรับ run Java EE นี่แหละ

แล้วทำไมต้อง run บน Java EE Application Server นี่หล่ะ

ก็เพราะ Java EE Application Server นี่แหละ ที่จะเตรียม Framework และ Library สำหรับการทำงานให้เป็นไปตาม Principal ของ Java

หรือพูดง่ายๆว่า Java EE Application Server นี่เปรียบกับรถยนต์ และ Application ที่เราสร้างขึ้น เหมือนกับคนขับรถ

ปกตินั้น รถยนต์จะวิ่งเองไม่ได้ ถ้าไม่มีคนขับ แต่ตัวรถยนต์นั้นอยู่ในสภาพที่พร้อมวิ่งเสมอ แค่ไม่รู้ว่าจะวิ่งไปทางไหนแค่นั้นเอง

Java EE Application Server ก็พร้อมทำงานบน Web Technology และ Web Services ด้วยการประมวลผลที่สามารถ scale ขึ้น มีการทำ High Availability หรือ Fail-Over อยู่เสมอ นอกจากนั้นยังทำงานแบบ multithread และ OS independent อยู่แล้ว

แค่เราใส่ application ลงไปใน Java EE Application Server เพื่อบอกมันว่า ประมวลผลอะไรก็แค่นั้น

เหมือนเราจะเติมคนขับรถลงไปในรถ เพื่อให้เค้าขับรถไปทางไหนก็แค่นั้น

ไอ้พวกเขียน Java มา 3ปี ส่วนใหญ่ ไม่ลึกซึ้งถึงจุดนี้ ไม่เคยใช้ framework แล้วพอเวลาทำอะไรก็พยายามแถไปเองแบบมั่วๆ หลังจากอ่าน Blog นี้แล้ว ก็คงเลิก “แน่นอก” และไม่ทำตัว “รกอก” ซักที

ดังนั้น WebLogic หรือ WebSphere ที่เรียกกันว่า Java EE Application Server ที่ license เป็นล้านนั้นอ่ะ  ก็เปรียบเสมือน รถเฟอราลี่ ปอเช่กันอยู่แล้ว แต่โปรแกรมเมอร์กากส์ๆ เอามาขับไปจ่ายตลาด…

แล้วไอ้ WebLogic หรือ WebSphere เนี่ยะ เตรียมอะไรให้เราไว้บ้างหล่ะ???

พวกนี้เตรียม Java EE Framework และ Library ให้เรียกใช้ครับ เช่น

– JAAS สำหรับจัดการทำ Authentication และ Authorization ซึ่ง Java นั้น การจัดการเกี่ยวกับ User จะทำในระดับ Application Server ไม่ใช่ Application ครับ ดังนั้นการที่หลายๆ Application ทำงานบน Application Server เดียวกัน จะใช้ชุด Username และ Password เดียวกันได้ (ถ้าทำตาม JAAS) นอกจากนั้น ยัง Single Sign-On หรือว่า Login ครั้งเดียว แต่เข้าใช้งานได้หลาย Application พร้อมกันได้อีก

ยังไม่หมด JAAS ยังทำให้ Application Server หลายๆตัวทำ Single Sign-On ได้ด้วย โดยการ trust-server กัน (จะมีบทเรื่อง วิธีการใช้ JAAS และการทำ Single Sign-On ระหว่าง Server) ทำให้ login ครั้งเดียว username เดียวและ Password เดียว ทำงานได้บนหลายๆ Application Server โดยไม่ต้อง Login ใหม่ (ลดปัญหาการ grant สิทธิ์ของแต่ละ application ไปมากมาย)

– JSP & Servlet และ JSF สำหรับจัดการเรื่องการแสดงผล และการควบคุม session และ replicate session ของแต่ละ user ที่ทำงานผ่าน Java EE Application Server ไม่ให้เกิดการที่ session นั้นกระโดดข้ามกัน โดยการแบ่ง scope ของตัวแปลเป็น page, request, session และ application (ไว้จะกล่าวต่อไปในบทการใช้ JSP& Servlet และ JSF) ไม่ใช่โปรแกรมกากๆส์ที่ทุกตัวแปลยัดลง Database อย่างเดียว

– Enterprise Java Bean สำหรับจัดการ Business Logic เพื่อการควบคุม session และ replicate session ของแต่ละ User ที่มาจากการเรียกใช้ของ JSP & Servlet และ JSF  (อันนี้ก็อีกบท)

– Java Persistence API สำหรับจัดการเกี่ยวกับการเก็บข้อมูลลง Database โดยที่ผู้ใช้ไม่ต้องมาเขียน SQL และคุมการเปิดปิด Database ให้วุ่นวาย

– JNDI สำหรับอ้างถึง Object หรือวัตถุเสมือต่างๆ บน Java EE Application Server ทั้งในเครื่องเดียวกัน และต่างเครื่องกัน

– JMS สำหรับการส่งข้อมูลกันแบบ Asyncrhonous (เริ่มขี้เกียจบรรยายสรรพคุณ)

– JCA สำหรับการเขียน Java เพื่อต่อกับ Legacy System เช่น Mainframe

– JDBC สำหรับจัดการเกี่ยวกับการเชื่อมต่อ Database

– JMX สำหรับ Monitoring และแก้ไข Parameter ต่างๆของ Java ตอน runtime

– JAX-WS การเรียกใช้ Web Service ต่างๆ

– การทำ Fail-Over และ High Availability

โอยเยอะ บรรยายไม่หมด ทุกข้อมีบทที่บรรยาย ไว้ว่ากันภายหลังครับ

แค่นี้ก็เห็นแล้วว่า Java เป็นรถสปอร์ตสุดเท่ห์ WebLogic และ WebSphere ก็หล่อมาก แต่อย่าเอาไปใช้จ่ายตลาด เขียนโปรแกรมตลกๆ แบบเดิมนะครับ

Blog นี้ จะมุ่งเน้นแต่การเขียนโปรแกรมแบบ Java EE ดังนั้น เรื่องง่ายๆ ของ Java จะอธิบายแค่พอเข้าใจ พวก Library ของ Java SE ที่ช่วยในการคำณวนเลข ไปหาอ่านเอาในหนังสืออื่นนะครับ

สอนไปก็ รกอก อ่านเองนั้นได้แหละ แค่อ่าน แล้วเขียน command ตาม ก็ได้ output ละ

เรามาพูดถึงอะไรที่หนังสือ Java ในไทยไม่มีกันดีกว่า เช่น Java EE นี้

Java EE เป็นจุดแข็งของ Java แต่ก็ไม่เข้าใจว่า ทำไมหนังสือ Java ภาษาไทยไม่เขียนอธิบายพวกนี้ ไม่รู้ว่า คนเขียนจงใจ แค่เขียนเอาวิทยฐานะรึป่าว เขียนในจุดที่ไม่ควรเขียน เขียนไปก็ไม่ช่วยให้คนพัฒนา Java ได้ดีขึ้น

ผมอัดอั้นตันใจ เลยเขียน Blog นี้ขี้นมาเพื่อระบาย

Drama ก่อนจบ เพราะทนไม่ไหว สวัสดีครับ

 

About champillon

Enterprise Opensource Implementer
This entry was posted in Java Lesson. Bookmark the permalink.

20 Responses to Chapter3.1: Java EE Features

  1. zixma13 says:

    เยี่ยมครับ ไว้จะติดตามดูดความรู้เรื่อยๆ ครับ *-*

  2. pi6eon says:

    พี่เป็นไอดอลคนต่อไปของผมต่อจากพี่ up1 กับ roofimon เลยนะเนี้ย
    ชอบบทความมากๆ ครับผม อธิบายเข้าใจง่ายมากๆ แต่ลึกซึ้ง
    ขอบคุณค้าบ

  3. cavaji says:

    ว่างๆเขียนหนังสือออกมาเลยพี่ รออ่านอยู่…

    • champillon says:

      เด๋วค่อยๆเขียนไปเรื่อยๆครับ เสร็จแล้วจะรวมเล่มให้ แต่คงมี ศัพท์เกรียน เหมือนเดิม ฮาๆ

  4. SemicoloN07 says:

    มาปูเสื่อรออ่านบทถัดๆไปครับ อ่านแล้วสนุกสนาน นึกภาพตามได้เบย ^^

  5. เมพสุดๆ ใช้ทั้ง JAAS, JAX-WS …. ผมนึกว่าคนเลิกใช้ไปหมดแล้วนะเนี่ย

    • champillon says:

      พี่นู๋โบ็ทหล่อ 5ร. ผมให้ไปต่อครับ.

      – ไม่ใช้ JAAS จะทำ SSO อย่างไร
      – Amadeus Service ที่สายการบินทั่วโลกเค้าใช้ระบบ booking ต้องใช้ JAX-WS เข้าไปคุยครับ

      • แสดงว่า google, twitter, facebook … ใช้ JAAS กันทั้งนั้นเลยสินะ เลยาทำ SSO ได้
        หูยยย ใครจ้างผมเขียนโปรแกรมต่อ Amadeus ผมจะคิดว่าต้องใช้ JAX-WS เพิมอีกสิบเท่า

      • champillon says:

        หมายถึง Java ครับ ที่ทำ SSO แหม คุณชายพีระพัด จุดทาเมพเรา
        ส่วน JAX-WS นี่คิดราคาเพิ่มขนาดนี้ มิน่า รายได้เกินล้านต่อปี แถมยังหล่อ 5ร. อีก

  6. เห็นด้วยครับ ทำไมหนังสือ ภาษาไทย แม่งมีแต่พวก เริ่มพัฒนา Application ด้วย XXX ก็ไม่รู้

  7. ʎriyʌtotle`` says:

    แวะเข้ามาศึกษาวิธีขับเฟอร์รารี่ 😉

  8. รออ่านบทต่อไปอยู่ครับ T-T

  9. Bomby Corleone says:

    น่าสนใจทุกบทเลยครับ

  10. วงศ์วริศ says:

    ขอบคุณมากครับ กำลังศึกษาเรื่องนี้อยู่พอดีเลยครับ

Leave a comment