
วัน ก่อนระบบรายงานของ application ที่ทางบริษัทฯพัฒนาให้เกิดเหตุไม่สามารถทำงานได้ตามปกติ คือไม่สร้าง report ที่เป็น pdf ให้ หลังจากหาเหตุพบว่า X Window Server ตายไปโดยไร้สาเหตุ (ซึ่งเป็นหน้าที่ของ system admin ของลูกค้าต้องไปหาสาเหตุเอง) ทางที่ปรึกษาของลูกค้า จึงโทรมาคุยด้วยว่าทำไมต้องใช้ X Window Server ด้วยหรือ ในเมื่อสร้าง pdf ได้แล้ว ทำไมไม่ download มาเปิดปลายทาง ผมจึงต้องชี้แจงเหตุผล
รูป ข้างบนแสดงวิธีการทำงานของ JasperReport ในขั้นต้น definition ของรายงานแต่ละตัวจะจัดเก็บในรูป XML file เมื่อ รายงานถูกเรียกใช้ XML file ดังกล่าวจะถูก load ออกมา และ parse เพื่อสร้างเป็น instance ของ JasperDesign จากนั้นจะถูก compile เพื่อตรวจสอบความถูกต้องต่างๆของรายงาน กลายเป็น instance ของ JasperReport ซึ่งจากนั้นเป็นการนำข้อมูลต่างๆมา fill ลงในรายงานซึ่งข้อมูลเหล่านี้ส่วนใหญ่คือข้อมูลที่ดึงมาจากฐานข้อมูลผ่านทาง data source ผลจากการ fill ข้อมูลจะได้ object ใหม่ใน JasperPrint ที่พร้อมที่จะ print ออก ด้วย JasperPrintManager ซึ่งเป็นการทำ serialize ลง disk หรือผ่านทาง network ออกไปเพื่อแสดงผล หรือจะ export ออกด้วย JasperExportManager เป็น file มาตรฐานนิยมเช่น PDF, HTML หรือ XML ได้
ที่ นี้ JaperReport ติตต่อกับ X Window Server เมื่อไร เมื่อดูใน source code ของ Jasper จะพบว่าใน class dori.jasper.engine.fill.JRBaseFiller ซึ่งเป็นส่วนหนึ่งของ JasperFillManager ในส่วนของ initialize มีการเรียก
java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment() java.awt.GraphicsEnvironment#getAvailableFontFamilyNames()
เป็น การเรียก FontFamily ผ่านทาง GraphicsEnvironment ซึ่งกำหนดใน java.awt ของ java เอง ซึ่งจะเป็นการติดต่อ X Window Server อีกทีนึง
ดังนั้น ถ้าไม่มี X Window Server ทำงานอยู่ก็ไม่สามารถสร้าง JasperPrint instance นั่นคือไม่มีข้อมูลในการ print ออกหน้าจอหรือแม้แต่สร้าง PDF file เลย
ดัง นั้นคำถามที่ถามว่า ทำไมไม่ให้สร้าง PDF file แล้ว download มาเปิดที่ปลายทาง แทนที่จะส่งมาเปิดที่ปลายทาง คำตอบก็คือ Jasper ไม่สามารถสร้าง file ได้เลยถ้าไม่มี X Window Server
ในส่วนของ Windows-based OS นั้น window system ถือเป็นส่วนหนึ่งของ kernel ของระบบปฏิบัติการ ในขณะที่ UNIX-based OS นั้น Window system เป็น process ระดับ user ประกอบด้วย X Window Server และ X Client ดังนั้นการ boot linux ไม่ได้หมายความว่า start X Window Server เสมอไป แต่สามารถนำเอากระบวนการ start X Window Server หลังจาก boot OS เรียบร้อยแล้ว