วันพฤหัสบดีที่ 15 กันยายน พ.ศ. 2554

ทำความรู้จักกับเจ้า JAXB ตอนที่ 3 (ตอนสุดท้าย)

รู้ไว้ใช่ว่าใส่บ่าแบกหาม กับ JAXB  ^-^


รู้จักกับ JAXB Compiler Options
คือ ตัวแปรภาษาโดยใช้ Compileler JAXB XJC Schema ทำงานได้โดยจะต้องอาศัย  Source XML Schema เพื่อสร้าง JAXB Content Classes  ขึ้นมานั่นเอง

รู้จักกับ JAXB Schema Generator Option
คือ ตัวที่สร้าง JAXB Schema ,Schemagen โดยจะมีการสร้าง file Schema เพื่ออ้างถึง nemespace ใน Class Java เพื่อความเหมาะสมในการนำไปใช้งาน กับ Shell Script ใน Directory ใน Platform ของเราเอง

รู้จักกับ Customizing JAXB Bindings
= >  Why Customize ?
1. เพื่อเพิ่มคำอธิบายแนวคิด แนวทาง ประกอบกับเครื่องมือ javadoc ที่ทำการกำหนด   
schema
2. เพื่อปรับแต่งค่า Default ใน JAXB (Mapping ,Java toSchema or Schema to Java)

Scope, Inheritance, and Precedence
การกำหนดค่าตัวแปล default ใน JAXB นั้น สามารถปรับเปลี่ยนหรือยกเลิก ที่สี่ระดับที่แตกต่างกันหรือขอบเขต ดังภาพ


ประโยชน์ของ JAXB
1. ช่วยให้หลายภาษาสามารถติดต่อกันได้ผ่านตัวกลางคือ XML
2. มีความยือหยุ่นสูงสามารถปรับแต่งได้

เป็นยังไงกันบ้างครับสำหรับ ทำความรู้จักกับ JAXB หวังว่าคงเป็นประโยชน์ กับเพื่อนๆ นะครับ ^-^

วันอังคารที่ 13 กันยายน พ.ศ. 2554

ทำความรู้จักกับเจ้า JAXB ตอนที่ 2

สักตัวอย่างกับ โปรแกรม modify-marshal
สามารถโหลดไฟล์ Schema ได้จากหน้าเว็บที่โหลด (http://download.oracle.com/javaee/5/tutorial/doc/bnazf.html) ในบล๊อกนี้เราจะมาเริ่มต้นด้วยการสร้างโปรแกรมmodify-marshal กันตั้งแต่ create กันเลย

เริ่มต้น เราสร้างโปรเจคใหม่เลย เลือกเป็น Java application -> next


ในที่นี้เราจะตั้งชื่อเป็น modify-marshal -> finish

จากนั้น คลิกขวาที่โปรเจคเลือก new -> JAXB Binding...



ตรง Binding Name : po, schemaFile : เป็นไฟล์ .xsd ที่เราโหลดจากตัวอย่างที่ให้ไว้, package Name : primer.po -> finish



เราจะได้ ไฟล์ที่ netbean สร้างให้เรา



และไฟล์ Main 



เมื่อกดรันโปรแกรมแล้วจะเห็นได้ว่า complie ไม่ผ่าน


ให้เราทำการใส่ไฟล์ po.xml ลงในโปรแกรมด้วยวิธีที่ง่ายที่สุดคือ...

ผลที่ได้ออกมา คือ …



Q : โปรแกรมนี้แสดงผลอะไร ไม่เห็นเข้าใจเลย...
A : โปรแกรมนี้แสดงผลการอ่านไฟล์จาก XML และเขียน billTo โดยเปลี่ยน Robert Smith
เป็น John Bob และที่สำคัญคือการนำไฟล์ Schema แปลงเป็น ไฟล์ Java และเปลี่ยนจาก ไฟล์Java โดยแสดงผลเป็นไฟล์ XML อีกด้วย


ในไฟล์ Main 
ที่บรรทัดที่ 29 เราจะอ่าน ไฟล์ po.xml (unmarshal)
และในบรรทัดที่ 44 เราจะเขียนแต่ในที่นี้เราให้มันแสดงผลลัพท์ออกมา (marshal)


ติดตามได้กับตอนสุดท้ายกับ ทำควาวรู้จักกับ JAXB ตอนที่ 3 เร็วๆ นี้ ^^

เจาะลึกโปรแกรม MouseEvents2 กัน

ในโฟลเดอร์MouseEvents2จะมีไฟล์ทั้งหมดสี่ไฟล์ ในบล๊อกนี้เราจะกล่าวถึงไฟล์ที่มีชื่อว่า MouseReceiver2BeanInfo และ MouseSource2BeanInfo ส่วนอีกสองไฟล์จะคล้ายกับโปรแกรมของMouseEvents

ก่อนจะเข้าโปรแกรมกันผมจะขอโชว์ตัวไฟล์ MANIFEST.MF (อุ๊บ....ลืมไปกันหรือยังเอ่ย ทบทวนได้ในเรื่อง Counter Bean)
ตัวอย่างไฟล์ MINIFEST ที่ใช้ในโปรแกรมนี้



ตัวอย่างไฟล์ MouseSource2BeanInfo


จะเห็นได้ว่าใน ฟังก์ชัน PropertyDescriptor เราจะไม่แสดงผล properties ออกมาเลย


ส่วนฟังก์ชัน MethodDescriptor จะเหมือนกับ PropertyDescriptor
และสุดท้าย ฟังก์ชัน EventSetDescriptor คือเราจะกำหนดให้สามารถเรียกใช้งานฟังก์ต่างๆที่เรากำหนดให้เท่านั้นจากไฟล์ MouseSource2


//-----------------------------------------------------------------------------------
และตัวอย่างไฟล์ MouseSource2BeanInfo


ในส่วนของฟังก์ชัน PropertyDescriptor จะเหมือนกับ MouseSource2Info และฟังก์ชัน EventSetDescriptor จะไม่ให้เห็น event


และส่วนสุดท้ายฟังก์ชัน MethodDescriptor จะทำการเรียกฟังก์ชันต่างๆที่กำหนดไว้ในไฟล์ MouseReceiver2 แล้ว return ส่งค่าการแสดงผลออกมา


ทำความรู้จักกับเจ้า JAXB ตอนที่ 1

JAXB คือ อะไร
JAXB ก็คือ สถาปัตยกรรม ที่ช่วยให้สร้างความสดวกสบายให้กับ Deverlopers ในการ แปลงข้อมูลจาก XML ไปเป็น Java ( Unmashalling ) หรือ จาก Java ไปเป็น XML ( Mashalling ) นั่นเอง

JAXB ARCHITECTURE
-------------> Schema to Java
 JAVA to Schema
ภาพแสดงการนำ JAXB ไปใช้งาน

ขั้นตอนการดำเนินงานตาม โครงสร้างดังภาพด้านบน สามารถแบ่งได้ดังนี้
- Schema compiler : เป็นส่วนที่คอยแปลงหรือเชื่อมโยง Source Schema กับกลุ่มของ JAXB Class ที่เป็นโปรแกรมภาษา Java
- Schema generator : เป็นขั้นตอนการจับคู่กลุ่มโปรแกรมที่มีอยู่เพื่อให้ได้ Schema ออกมา
- Binding runtime framework : เป็นการเตรียม unmarshalling และ marshalling เพื่อให้สามารถเข้าถึง จัดการและตรวจสอบเนื้อหาใน XML ด้วยการใช้ schema ที่ได้มาและโปรแกรมที่มีอยู่ได้
The JAXB Binding Process

ภาพแดงการทำงานที่เกิดขึ้นในการสร้างใช้ JAXB

ขั้นตอนในการเชื่อมโยงข้อมูลการทำงานสามารถแบ่งได้ดังนี้
1. Generate classes : XML Schema จะถูกนำมาใช้เป็นตัว Input เพื่อที่จะให้ตัว Complier สร้าง  Class JAXB ที่มาจาก Schema นั้นๆ
2. Compile classes : ทุกๆ Class ที่ถูกสร้างขึ้น Source File ต่างๆและ Code โปรแกรมจะต้องถูก Complier ตรงส่วนนี้
3. Unmarshal: เอกสาร XML ที่เขียนขึ้นตามข้อจำกัดต่างๆใ นthe source schema จะถูก unmarshal โดยJAXB binding framework นอกจากนั้น JAXB ยังสนับสนุนการunmarshal ข้อมูล XML จากข้อมูลอื่นๆเช่น DOM, string buffers, SAX และอื่นๆ
4. Generate content tree : กระบวนการ unmarshal จะสร้างcontent tree ของ Object ที่ได้มาจากการสร้างJAXB classต่างๆซึ่ง content tree นี้จะเป็นตัวแทนโครงสร้างและหัวข้อของเอกสาร XML
JAXB Binding Process
5. Validate (optional) : อยู่ในขั้นตอนการ unmarshal ที่เป็นการตรวจสอบเอกสาร XML ก่อนจะสร้าง content tree ซึ่งถ้ามีการปรับเปลี่ยน content tree ในขั้นตอนที่ 6 ขั้นต่อไปก็จะสามารถใช้การดำเนินการแบบ JAXB Validate เพื่อเป็นเหตุผลในการเปลี่ยนแปลงก่อนจะ marshalcontent กลับไปเป็นเอกสาร XML
6. Process content: Client สามารถเปลี่ยนแปลงข้อมูล XML ที่ถูกแทนด้วย Java content tree โดยความหมายของ interface ต่างๆถูกสร้างโดย binding compiler
7. Marshal: เป็นขั้นตอนที่ content tree ถูก marshal ออกมาเป็นเอกสาร XML เป็น 1 หรือ มากกว่า 1 เอกสาร

Unmarshalling คือ อะไร
คือ การแปลงเอกสาร XML ไปเป็น Java Object
Marshalling คืออะไร
คือ การแปลงจาก Java Object ไปเป็น เอกสาร XML
Validation คือ อะไร
คือ กระบวนการตรวจสอบเอกสาร XML กระบวนการนี้ได้ถูกเพิ่มขึ้นมาในตอนทำ marshal เพื่อที่จะเป็นการยืนยันว่ามันจะไม่ทำให้เอกสาร XMLเกิดความผิดพลาดเมื่อมีการเปลี่ยนแปลงเอกสารในรูปแบบของ JAXB

XML Schema คืออะไร
คือ วิธีการที่จะใช้จำแนกชนิดของเอกสารแบบ XMLโดยจะบอกถึงโครงสร้างและชนิดของข้อมูลในเอกสาร XML แต่ละชนิด
โดยตัว schema เองมีหน้าตาเหมือนเนื้อหา XML ตามปรกติเช่น XML Schema (W3C) และ RELAX NG หรือนิยามขึ้นโดยภาษาพิเศษโดยเฉพาะและเป็นส่วนหนึ่งของ XML เช่น Document Type Definition (DTD) ซึ่งพัฒนาขึ้นก่อนแบบอื่นที่กล่าวมาข้างต้นโดยพัฒนามาจาก SGML โดยมีข้อจำกัดเช่นการไม่รองรับ XML Namespace ( http://th.wikipedia.org/wiki/XML_schema )

XML Schema ต่างๆ
- XML stands for Extensible Markup Language
- XML is a markup language much like HTML
- XML was designed to carry data, not to display data
- XML tags are not predefined. You must define your own tags
- XML is designed to be self-descriptive
- XML is a W3C Recommendation
  Language


Java Representation of XML Schema
JAXB จะสนับสนุนการจัดกลุ่ม เพื่อสร้างเป็น class ใน Java Package   โดยจะประกอบไปด้วย
- ชื่อ Class ที่ได้มาจาก XML element name หรือ ที่กำหนดโดย binding customization
- ObjectFactory class คือ factory ที่ใช้ในการ return instances of a bound Java class



Mapping Schema to Java or Java to Schema
     สำหรับรูปแบบการแปลง Shema เป็น Java นั้น หรือ จาก Java เป็น Schema นั้น สามารถ ศึกษาได้จาก  http://download.oracle.com/javaee/5/tutorial/doc/bnazq.html นะครับ




สำหรับ ทำความรู้จักกับเจ้า JAXB ตอนที่ 1 ก็ขอจบไว้เพียงเท่านี้ก่อนนะครับ ติดตามอ่านตอนต่อไปได้ เร็วๆ นี้ ^^

วันจันทร์ที่ 12 กันยายน พ.ศ. 2554

Google App Engine ไม่ยากอย่างที่คิด

Google App Engine

Google App Engine คือ ???


Google App Engine คือแพลตฟอร์มการพัฒนาและการให้บริการพื้นที่แอปพลิเคชันของ Google Google App Engine  ซึ่งช่วยให้ นักพัฒนา application บน web สามารถ สร้าง apllication ของตัวเอง แล้ว deploy ขึ้นไป เพื่อให้ คน ทั่ว ไปเข้าไปใช้บริการได้

ต่อไปเรามาดูวิธีการทำกันดีกว่า !!!

อย่างแรกเราต้องมีอะไรกันก่อน ???

1.NetBeans (ในที่นี้จะใช้ NetBeans Vertion 6.9.1)
2.Google App Engine SDK for Java (Download ได้ที่ http://code.google.com/intl/th-TH/appengine/downloads.html#Download_the_Google_App_Engine_SDK )
3.WEB BROWSER (ในที่นี้จะใช้ Google Chrome)

เริ่มกันเลย ^^

1. เราจะต้องมี Account ของ google กันก่อนนะครับ ให้เข้าไป Sign Up ในหน้าของ Google App Engine ที่ https://appengine.google.com/start จะขึ้นหน้าต่างมาดังรูป


2.จะขึ้นหน้าต่างมาให้เราดังภาพ ให้เราใส่ เบอร์โทรศัพท์ ของเราเข้าไป ในช่อง Mobile Number (ตัวอย่างเช่น +66814937xxx ) แล้วกด Send สักครู่ เราจะได้รับข้อความจากทาง Google มาเป็น Code ให้เรานำ Code มาใส่  


3. จะเข้ามาที่หน้า ดังภาพ ในช่อง Application Identifier ให้ใส่ ชื่อ web application ของเรา ( ในที่นี้จะใช้ ilovecomponent ) และ ในช่อง Application Title ให้ใส่ ชื่อ Title ของ Application ( ในที่นี้คือ ComponentBase ) แล้วเลือกที่ Create Application



4. จะขึ้นหน้าต่างขึ้นมาบอกว่า ลงทะเบียนเสร็จ เรียบร้อยแล้ว


5. ให้เราทำการเปิดโปรแกรม NetBean ขึ้นมา แล้วเข้าไปที่ Tool => Plugin จะได้หน้าต่างดังรูป แล้ว คลิ๊กที่ Add


6. ในช่อง Name ให้เราใส่ชื่อ อะไรก็ได้เข้าไป ( ในที่นี้ใส่ ilovecomponent ) และในช่อง URL ให้ใส่
http://kenai.com/downloads/nbappengine/NetBeans69/updates.xml (ลงตาม Vertion Netbean ที่ใช่นะครับ ^^ )  แล้วคลิ๊ก ok


7. จากนั้นให้เราคลิ๊กที่ Availiable Plugins แล้วติ๊กถูก อันที่เป็น Google App Engine ทั้ง หมด จากนั้น กด Install เพิ่อ ติดตั้ง Plugin ในการ จัดการ Google App Engine เสริมเข้าไป

8. จากนั้นเราจะเริ่มทำการติดตั้ง Google App Engine Service ลง NetBean ให้เรากลับมาที่หน้าต่างการทำงานปกติของ NetBean กันก่อน นะครับ แล้วทำการ คลิ๊กขวาที่ Servers => Add Server ดังภาพ


9. จะปรากฎหน้าจอ ดังภาพให้เราเลือกที่ Google App Engine แล้วคลิ๊ก Next





10. ในหน้านี้ให้เราเลือกเข้าไปที่ Location ที่เราเก็บ Google App Engine SDK for Java ไว้ จากนั้นคลิ๊กที่ choose และ Next ตามลำดับ


11.จากนั้นให้เราทำการกำหนด port ต่างๆ ตามภาพ จากนั้น เลือก Finish
12.จากนั้นเราจะทำการเริ่มสร้าง Project กัน เพื่อที่จะ Deploy ขึ้นไปบน Google App Engin ( ในที่นี้เราจะลองสร้าง Project web Application เพื่อนับจำนวนผู้เข้าชม ) เลือก Java Web => Web Application


13. ตั้งชื่อ Project แล้วเลือก Next


14.ในช่อง Server ให้เาเลือก Google App Engine แล้วคลิ๊ก Next และ Finish ตามลำดับ

15.จากนั้นให้เราทำการเขียนโปรแกรม Counter ให้เสร็จ (ในที่นี้เราจะขอไม่กล่าวถึง นะครับ ^^)





16.จากนั้นทางด้านซ้ายมือให้เรา ดับเบิลคลิ๊กเลือก appengine-web.xml จากนนั้นในช่อง Application Name ให้เราใส่ชื่อเดียวกับ ที่เรา ลงทะเบียนไว้ ( ในที่นี้คือ ilovecomponent ) และช่อง Vertion เป็น 1


18. ให้เราทำการคลิ๊กขวาที่ Project แล้วทำการเลือกที่ Deploy To Google App Engine เพื่อ Deploy ขึ้นไปบน Google App Engine ระหว่างที่โปรแกรมทำการ Deploy อยู่นั้น  จะขึ้นหน้าต่าง Set up your Google email and password ให้เราใส่ Email และ Password ของเราลงไปแล้วกด OK

19. เมื่อเรากลับเข้าไปที่ Account ของเรา จะสังเกตุเห็น Project ที่เราสร้าง ถูก Deploy ขึ้นบน Google App Engine เรียบร้อยแล้ว ลองเข้าไปดูโดยคลิ๊กที่เลข 1  หรือ http://ilovecomponent.appspot.com/


20.จะปรากฎหน้าต่างดังภาพ ก็เป็นอันเสร็จ เรียบร้อย ^^




⇒ หวังว่า การ Deploy Application ขึ้นบน Google App Engine ที่เราได้นำเสนอไปคง มีประโยชน์ ต่อผู้พัฒนา Web Application ทั้งหลายนะครับ ^^

เปรียบเทียบความแตกต่างระหว่าง mouseEvents and mouseEvents2

จากที่เราได้ศึกษาการสร้าง bean box จากบท Counter Bean (http://ilove-component.blogspot.com/2011/06/counter-bean.html)ในบทนี้เราจะมาเปรียบเทียบความแตกต่างระหว่าง โปรแกรมสองโปรแกรมกัน

- ในโปรแกรม mouse Events จะมีไฟล์โปรแกรมด้วยกันสองตัว คือ MouseReceiver   จะทำหน้าที่กำหนดการต่างๆเกี่ยวกับ mouse และ MouseSource จะแสดงผลการกระทำต่างๆของ mouse

- ส่วนโปรแกรม mouse Events2 จะคล้ายๆกับ mouse Events แต่จะเพิ่ม MouseReceiver2BeanInfo โดยจะทำหน้าที่ควบคุมให้สั่งใช้งาน mouseReceiver2 ได้แค่ส่วนที่กำหนดให้ใช้ได้เท่านั้นและไฟล์ MouseSource2BeanInfo จะทำหน้าที่ควบคุมให้ mouseSource ว่าจะสามารถทำอะไรๆได้บ้าง

ความแตกต่างระหว่างสองโปรแกรม

      



MouseEvents
//----------------------------------------------------------------------------------------




MouseEvents2
//----------------------------------------------------------------------------------------
จะเห็นได้ว่าการเรียกใช้งานของโปรแกรมระหว่าง MouseEvent and MouseEvents จะแตกต่างกันตรงที่การเรียกใช้ของฟังก์ชันเท่านั้น โดยจะเห็นได้ว่าโปรแกรม MouseEvents จะให้เรียกใช้แค่ส่วนที่ต้องการควบคุมMouseเท่านั้น

ส่วนผลการรันโปรแกรมระหว่าง MosueEvents and MouseEvents2 ผลการรันโปรแกรมจะออกมาเหมือนกัน ดั่งรูปภาพข้างล่าง


แล้วพบกันใหม่ในบทความต่อไปครับ