สร้าง XML Binding Class ด้วย JAXB
Monday, March 15th, 2010สไลด์ยังอุ่นๆ อยู่เลยเพราะพึ่งออกจากเตาใหม่ๆ สไลด์นี้ว่าด้วยการสร้าง XML Binding Class ด้วย JAXB ใน Java เป็นตัวอย่างและสรุปสั้นๆ ให้พี่ที่ทำงานฟัง ถ้าต้องการรายละเอียดถามได้ครับ
สไลด์ยังอุ่นๆ อยู่เลยเพราะพึ่งออกจากเตาใหม่ๆ สไลด์นี้ว่าด้วยการสร้าง XML Binding Class ด้วย JAXB ใน Java เป็นตัวอย่างและสรุปสั้นๆ ให้พี่ที่ทำงานฟัง ถ้าต้องการรายละเอียดถามได้ครับ
คราวที่แล้วเขียนเกี่ยวกับการใช้ Subversion (svn) เบื่องต้น ได้แก่ การสร้าง Repository, เพิ่มไฟล์เข้าสู่ index ใน working copies (add), และส่งเข้าสู่ Repository (commit) ส่วนตอนนี้ก็จะขอพูดส่วนเกี่ยวกับคำสั่งต่างๆ ที่เอาไว้ติดตามความเคลื่อนไหว และการเปลี่ยนแปลงของ Repository ครับ
เป็นข้อมูลประจำสำหรับรุ่นนั่น เช่น Revision ผู้ commit วันเวลา จำนวนบรรทัดที่เปลี่ยนแปลง และบันทึกประจำรุ่น มีรูปแบบตามนี้ครับ
REVISION_NO | USER_NAME | DATE_TIME | LINE_CHANGED MESSAGE_LOG
ตัวอย่างเช่น
$ svn log file:///Users/sitdh/Repository/helloSVNServer ------------------------------------------------------------------------ r2 | sitdh | 2009-09-10 00:40:52 +0700 (Thu, 10 Sep 2009) | 1 line Create Project ------------------------------------------------------------------------ r1 | sitdh | 2009-09-09 21:56:38 +0700 (Wed, 09 Sep 2009) | 1 line test ------------------------------------------------------------------------
คำอธิบาย:
หมายเหตุ: ข้อมูลดังกล่าวเป็นข้อมูลที่ได้จาก Repository เนื่องจากเราระบุพาธไว้ด้านหลัง หากให้คำสั่ง svn log จะเอา log ที่อยู่ใน Working Copies มาแสดงแทน ซึ่งข้อมูลที่ได้อาจไม่ตรงกับ Repository วิธีแก้คือใช้คำสั่ง update เพื่อปรับปรุงข้อมูลให้ตรงกัน (Synchonize – sync) ระหว่าง Working Copies และ Repository
$ svn update file:///User/sitdh/Repository/helloSVNServer At revision 3.
คำอธิบาย:
ก่อนอื่นต้องทบทวนก่อนว่าในตัวอย่างของ blog ที่แล้วได้สร้างข้อมูลตัวอย่างและส่งเข้า Repository เรียบร้อยแล้ว (Revision 3 หรือ r3) จากนั้นได้แก้ไขข้อมูลในไฟล์ ‘index.php’ เล็กน้อย และ commit เข้าไปยัง Repository เรียบร้อยแล้ว (Revision 4 หรือ r4) ดังนั้นถ้าอยากรู้ว่าระหว่าง r3 และ r4 มีความแตกต่างตรงไหนบ้าง คำสั่งที่ช่วยได้ก็คือ diff ดังนี้
$ svn diff -r 3:4 Index: index.php =================================================================== --- index.php (revision 3) +++ index.php (revision 4) @@ -1,3 +1,4 @@ -hello, world\n"; + echo "
hope you like it
"; ?>
คำอธิบาย:
Index จะบอกว่าตอนนี้เปรียบเทียบไฟล์ไหนอยู่r3 แทนด้วย ‘-’ และ r4 แทนด้วย ‘+’ โดย ใช้บอกว่าบรรทัดไหนหายไปจาก r4 (-) และเพิ่มเข้ามาใน r4 (+) ถ้าบรรทัดไหนไม่เปลี่ยนแปลงก็จะไม่มีเครื่องหมายนำหน้าr3 แต่หายไปจาก r4 (เครื่องหมาย - นำหน้า)r4การทำเวอร์ชั่นเป็นอีกเรื่องที่ผมพึ่งศึกษาครับ ตอนนี้ทำทั้ง software และงานเอกสาร มีประโยชน์ดีเหมือนกันใช้ไปก็ชักติดใจ ยังแอบคิดเหมือนกันว่าทำไมไม่รู้จักกันก่อนหน้านี้เนี้ยะ T-T หลักๆ ที่ใช้คือ Subversion (SVN) ครับ เพราะว่าเอาไปใช้เรื่องานเอกสารกับพี่ในห้อง (ซึ่งไม่ได้มาทาง software) เพราะเห็นว่า plugin มันง่ายดีบน Windows แต่ถ้าเป็นงานส่วนตัว ก็ใช้ Git ง่ายทีเดียว ความจริงอยากเขียน Git แต่คิดว่า Git บน Windows ยังไม่เกิดแน่ๆ เลยขอเป็น SVN ก่อนแล้วกัน ส่วน Git ค่อยมาเก็บตกเอาทีหลัง ไหนๆ วันนี้ก็ฤกษ์ดีแล้ว (เห็นเขาว่ากัน แต่ส่วนตัวเฉยๆ มาก) เลยขอเอาคำสั่งที่คิดว่าน่าจะใช้กันบ่อยๆ มาลงดีกว่า
SVN ประกอบด้วย 2 ส่วนก็คือ ทางฝั่งขวาคือฝั่ง Server หรือศัพท์ทางเทคนิคจะเรียกว่า Subversion Server จะเก็บ Repository ที่เราสร้าง ส่วนในภาพขอเรียกสั้นๆ ว่า Repository เพื่อให้เข้าใจได้ง่ายขึ้น Repository จะเป็นคนจัดการเรื่อง Version ของข้อมูล เก็บบันทึกการเปลี่ยนแปลงทุกอย่างไว้ และทำหน้าที่แจกจ่ายข้อมูลให้กับคนที่เข้ามาใช้งาน ฝั่งซ้ายคือ Client หรือศัพท์ทางเทคนิคจะเรียกว่า Subversion Client จะสื่อสารกับ Repository ผ่านตัวกลางที่เรียกว่า Network โดยอาศัยโปรโตคอลต่างๆ นาๆ แล้วแต่ทาง Repository จะสนับสนุน เช่น svn, svn+ssh, https เป็นต้น
ก่อนอื่นที่จะใช้ SVN คือ ต้องมี Repository ที่เราสามารถไป Checkout ข้อมูลมาได้ ในตัวอย่างที่ผมทำคือ สร้างไฟล์ Repository ในเครื่องตัวเองเลย เพื่อไม่ให้ไปเดือดร้อนชาวบ้านด้วย ใช้คำสั่ง
$ svnadmin create /path/to/repository
หมายเหตุ: /path/to/repository จำเป็นอย่างยิ่งที่ต้องเป็น Absolute Path
เสร็จแล้วจะได้โครงสร้างไดเร็คทอรี่ ที่ทำหน้าที่เป็น Repository ดังภาพ
จะเห็นได้ว่ายังเป็นไฟล์ หรือไดเร็คทอรี่เปล่าๆ อยู่ มีบ้างก็คือค่าโดยปริยายของ SVN เท่านั้น ซึ่งตอนนี้เราก็ได้ Repository พร้อมใช้งานแล้ว จากนั้นผมย้ายไปที่ Desktop เพื่อที่จะทดลองดึงเอาข้อมูลที่อยู่ใน Repository มาใช้งาน (Checkout) โดยใช้คำสั่ง
$ pwd /Users/sitdh/Desktop/workspace $ svn co file:///Users/sitdh/Repository/helloSVNServer Checked out revision 0. $ ls helloSVNServer $ cd helloSVNServer/ $ ls
--username USERNAME และ --password PASSWORD หรือจะใส่ --no-auth-cache เพื่อไมให้เก็บชื่อและรหัสผ่านไว้ก็ได้ครับ จะได้สบายใจ :P ไดเร็คทอรี่นี้จะเรียกว่า Working Copies ครับ
เนื่องจากเราไม่ได้เป็นเจ้าของ working copies อย่างแท้จริง และต้องทำงานร่วมกันคนอื่น เลยมีคำแนะนำ (เข้าใจว่าน่าจะเป็น De facto) ให้สร้างไดเร็คทอรี่ขึ้นมาอีก 3 ได้แก่ (เรียงตามการใช้)
baselineวิธีสร้างง่ายมากครับ คือ สร้างไดเร็คทอรี่ที่ต้องการแล้วค่อยใช้คำสั่ง add ของ svn ทีหลัง หรือใช้คำสั่ง mkdir ของ svn เพื่อสร้างและใส่เข้าไปใน list สำหรับ Commit ไปยัง Repository เลยก็ได้
วิธีที่ 1
$ mkdir trunk; mkdir branch; mkdir tag $ ls branch tag trunk $ svn add * A branch A tag A trunk
วิธิที่ 2
$ svn mkdir trunk; svn mkdir branch; svn mkdir tag A trunk A branch A tag $ ls branch tag trunk
หลังจากนั้นสั่ง commit เพื่อส่งข้อมูลไปให้ Repository ด้วยคำสั่ง
$ svn ci -m "Initialize Repository Structure" Adding branch Adding tag Adding trunk Committed revision 1.
คำสั่งด้านบนจะส่งข้อมูล หรือ Commit ไปยัง Repository ที่ Checkout มาข้างต้น โดยจะมีข้อความบันทึกประจำรุ่นตามข้อความที่ระบุหลัง -m หรือใช้ --message ก็ได้เช่นกัน บรรทัดที่ 2-4 คือ รายการไฟล์ที่ส่งข้อมูลเข้าไปยัง Repository ส่วนบรรทัดสุดท้ายคือเวอร์ชั่นล่าสุดหลังจากส่งไฟล์เข้าสู่ Repository
ตอนนี้เราได้โครงสร้างสำหรับเก็บข้อมูลเรียบร้อยแล้ว (อย่าลืมนะครับ นี่คือโครงสร้างแนะนำเท่านั้น ไม่จะเป็นต้องสร้างโครงสร้างแบบนี้ก็ใช้ได้ปกติ) ต่อไปคือเริ่มทดลองสร้างโปรเจ็คกันครับ เริ่มด้วยเข้าไปยัง trunk แล้วสร้างไดเร็คทอรี่ และไฟล์ด้านใน [02-04] เสร็จแล้วจะใส่ไฟล์เข้าไปในรายการอัพเดตกับ Repository [07-09] แล้วจึงส่งไฟล์ไปยัง Repository [11-15] ดังนี้
$ cd trunk $ mkdir aloha $ cd aloha $ touch index.php $ cd .. $ svn add * A aloha A aloha/index.php $ svn ci -m "Create Project" Adding trunk/aloha Adding trunk/aloha/index.php Transmitting file data . Committed revision 2.
ซึ่งหากมีไฟล์ใหม่เพิ่มขึ้นมาเรื่อยๆ ก็สามารถใช้คำสั่ง snv add ตามด้วย svn ci เพื่อส่งข้อมูลภายใน working copies ไปสู่ repository
จากตัวอย่างด้านบนเป็นการอธิบายการใช้งานเบื้องต้น ยังเหลือการทำงานต่างๆ ที่ช่วยอำนวยความสะดวกให้กับผู้ใช้มากขึ้น ก็ขอยกไปตอนหน้าแล้วกันนะครับ