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

การใช้งาน JAXB ใน NetBean ง่ายแค่ปลายนิ้ว

ก่อนอื่นสิ่งที่เราต้องมีคือ XML Schema หรือ WSDL ก็ได้ (ในตัวอย่างใช้ XML Schema)
อาจจะสงสัยนะครับว่า XML Schema คืออะไร ลองศึกษาได้จากลิงค์นี้เลยครับ

XML Schema ที่ใช้ในตัวอย่างครับ
โหลดได้จาก http://www.mediafire.com/?v4x2xneq9zjky3u

1. ทำการสร้าง Java Application ใน NetBean ขึ้นมา

2. คลิกที่เมนู File > New… เลือกที่ XML และ JAVA Binding ตามลำดับ คลิกที่ ปุ่ม Next
3. ตั้งชื่อการ Binding และ Browse ไฟล์ไปที่ XML Schema แล้วคลิกที่ปุ่ม Finish

4. ถ้าการสร้าง Binding สำเร็จ จะได้ไฟล์ที่ถูกสร้างจาก XML Schema ต่างๆ ดังภาพ

การสร้าง XML (Marshalling)
1. ใน Main Program เราจะสร้าง Object ของclass Area ซึ่งเป็นหนึ่งใน class ที่ถูกสร้างขึ้นจาก XML Schema โดยใช้ ObjectFactory

      //สร้าง Area จาก ObjectFactory
      Area a =
new ObjectFactory().createArea();
      //
ตั้งค่าให้ object Area ที่สร้างมา
      a.setAreaSeq(Integer.valueOf(1));
      a.setAreaName(String.valueOf("TestArea"));
      a.setAreaLat(Double.valueOf(133.123123));
      a.setAreaLng(Double.valueOf(133.123123));
2. ใน Main Program พิมพ์ jaxbm แล้วกดปุ่ม Tab บน Keyboard จะได้โค้ดโปรแกรมดังภาพ
try {
    javax.xml.bind.JAXBContext jaxbCtx =              javax.xml.bind.JAXBContext.newInstance
            (a.getClass().getPackage().getName());
    javax.xml.bind.Marshaller marshaller = jaxbCtx.createMarshaller();
    marshaller.setProperty
      (javax.xml.bind.Marshaller.JAXB_ENCODING,
"UTF-8"); //NOI18N
    marshaller.setProperty
      (javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    marshaller.marshal(a, System.out);
} catch (javax.xml.bind.JAXBException ex) {
    // XXXTODO Handle exception
    java.util.logging.Logger.getLogger("global")
      .log(java.util.logging.Level.SEVERE,
null, ex); //NOI18N
}

3. ทดลอง Run โปรแกรม จะพบ Error ดังภาพ จะเกิดจาก JAXB ไม่พบ @XmlRootElement ใน class Area
4. ทำการแก้ Error โดยการใส่ Annotation @XmlRootElement() ใน class Area
5. ทำการ Run โปรแกรมอีกครั้ง จะได้ผลดังภาพ ซึ่งเป็น XML ที่ได้จาก class Area
6. ในกรณีที่อยากได้ผลลัพธ์เป็นไฟล์ XML เราจะเปลี่ยนโค้ดดังนี้

      marshaller.marshal(a, new FileOutputStream("ที่อยู่ของไลฟ์ XML ที่เราจะเขียน"));

การอ่าน XML (Unmarshalling)
1. สร้างไฟล์ XML ชื่อ Area เก็บไว้ใน C:\
      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <ns2:area xmlns:ns2="http://webservice.ar/">
            <Area_Seq>1</Area_Seq>
            <Area_Name>เทคโนลาดกระบัง</Area_Name>
            <Area_Lat>133.123123</Area_Lat>
            <Area_Lng>100.123123</Area_Lng>
      </ns2:area>

2. ใน Main Program เราจะสร้าง Object ของclass Area ซึ่งเป็นหนึ่งใน class ที่ถูกสร้างขึ้นจาก XML Schema โดยใช้ ObjectFactory
      //สร้าง Area จาก ObjectFactory
      Area a =
new ObjectFactory().createArea();

3. ใน Main Program พิมพ์ jaxbu แล้วกดปุ่ม Tab บน Keyboard จะได้โค้ดโปรแกรมดังภาพ
try {
    javax.xml.bind.JAXBContext jaxbCtx =        javax.xml.bind.JAXBContext.newInstance
           
(a.getClass().getPackage().getName());
    javax.xml.bind.Unmarshaller unmarshaller =              jaxbCtx.createUnmarshaller();
    a = (Area) unmarshaller.unmarshal
      (
new java.io.File("C://Area.xml")); //NOI18N
} catch (javax.xml.bind.JAXBException ex) {
    // XXXTODO Handle exception
      java.util.logging.Logger.getLogger("global")
            .log(java.util.logging.Level.SEVERE,
null, ex); //NOI18N
}

4. แก้ไข "File path" ไปเป็น ที่อยู่ไฟล์ที่ต้องการ ในตัวอย่างคือ "C://Area.xml"
5. เพิ่มโค้ดในส่วนของการแสดงผลลัพธ์จากการอ่านไฟล์
      //แสดงผลการอ่านไฟล์ ออกทากหน้าจอ
      System.out.println("Area_Seq : "+a.getAreaSeq());
      System.out.println("Area_Name : "+a.getAreaName());
      System.out.println("Area_Lat : "+a.getAreaLat());
      System.out.println("Area_Lng : "+a.getAreaLng());


6. ทำการ Run Program จะได้ผลลัพธ์ดังภาพ

หวังว่าทุกคนคงจะใช้งาน JAXB ใน NetBean เป็นแล้วนะครับหลังจากได้ศึกษาจาก Blog นี้ ^^

วันพุธที่ 24 สิงหาคม พ.ศ. 2554

การใช้งาน Google App Engine โดยใช้ Eclipse ในภาษา JAVA

หลังจากไม่ได้เขียนบล็อกมานาน วันนี้เอาเรื่องดีๆจากทาง Google มาฝากครับ คือ Google App Engine หลายๆคนอาจสงสัยว่ามันคืออะไร มันนคือการนำ Web Application ที่เราเขียนไปฝากใว้กับ Google เค้านั่นเองครับ มันก็คล้ายๆกับ Web Hosting นั่นแหละ แต่ความพิเศษของ Google App Engine ก็คือความง่ายของมัน เพียงแค่ไม่กี่ขั้นตอนก็สามารถ Deploy (Upload) Web Application ของเราขึ้นไปอยู่นบน Internet แล้ว
Google App Engine รองรับหลายภาษาครับ เช่น Python Go เป็นต้น แต่ในตัวอย่างผมจะขอใช้ Java ครับ ถ้าใครพอจะมีความรู้เรื่อง Servlet มาบ้างก็คงจะทำความเข้าใจได้ไม่ยาก เขียนอะไรกันมายืดยาว เรามาเริ่มกันเลยดีกว่าครับ

--รายละเอียนเพิ่มเติมเกี่ยวกับ Google App Engine
--โปรแกรมที่ใช้กันในวันนี้น
Eclipse 3.6 (fro Java) http://www.eclipse.org/

การติดตั้งโปรแกรม
1. ในโปรแกรม Eclipse คลิกที่เมนู Help เลือก Install New Software…
2. ในช่อง Work in ใส่ URL http://dl.google.com/eclipse/plugin/3.6 คลิก Add
3. จะมี Dialog ขึ้นมาถามชื่อ ให้ว่างไว้แล้วคลิก OK
4. คลิกเลือกดังภาพ และกด Next
5. ทำตามขั้นตอนของโปรแกรมจนเสร็จการติดตั้ง Plug in


การเขียน Web Application โดยใช้ Google App Engine เบื้องต้น
1. ในโปรแกรม Eclipse เลือก File > New > Other…
2. เลือกที่ Google > Web Application Project
3. ตั้งค่าต่างๆของ Project ดังภาพ และคลิก Finish
4. จะได้หน้าจอดังภาพ
5. เมื้อได้ Project แล้วให้กดปุ่ม Compile เพื่อทำการ Compile
6. กดปุ่ม Compile ดังภาพ Project ของเราจะถู Compile ทันที
7. ทำการ Run โปรแกรมโดย คลิกขวาที่ Project > Run As > Web Application
8. ใน Tab ด้านล่าง ให้คลิกที่ปุ่ม Reload
9. เปิด Web Browser แล้วเข้าไปที่ http://localhost:8888/ เพื่อดูผลของโปรแกรม



การ Deploy Application
1. เข้าไปลงทะเบียนที่ https://appengine.google.com/ และทำตามขั้นตอนใน Web Site
2. คลิกที่ Deploy บน Toolbar
3. จะได้หน้าจอดังภาพ ให้คลิกที่ App Engine project setting…
4. ใส่ Application ID ที่ได้จากข้อ 1 เข้าไป และคลิก OK
5. คลิก Deploy แล้วรอจนกว่าจะ Upload เสร็จ
6. เข้าไปดู Application ที่ Deploy ไปที่ http://.appspot.com/

ผ่านไปแล้วครับสำหรับการสร้าง Web Application โดยใช้ Google App Engine ตั้งแต่เริ่มต้นจนได้ Application ไม่ยากเลยใช่มั้ยครับ ลองเขียน Web Application ของตัวเอง แล้วเอามาแชร์กันนะครับ

--Web Application ที่ได้จากตัวอย่าง
http://chon-nidhi.appspot.com/ (เป็น Code ตัวอย่างของ Google Plug in ใน Eclipse ครับ ^^)

วันศุกร์ที่ 8 กรกฎาคม พ.ศ. 2554

Package ของ Java

1.  ให้ศึกษา Package ของ Java โดยเน้นหนักไปที่ package scope  ของ attributesและ methods ที่อยู่ใน Package  ให้เขียนคำตอบลงใน blog

Package

        เป็นไฟล์ที่ใช้เก็บรายชื่อ class ที่การนำมาใช้ในงานเดียวกันหรือมีวัตถุประสงค์ในการทำงานคล้ายกัน เพื่อให้สะดวกแก่การใช้งานได้สะดวกและรวดเร็ว รวมทั้งยังสามารถกำจัดปัญหาเกี่ยวกับชื่อclass ที่ซ้ำกันได้ด้วย (ชื่อclass สามารถใช้ซ้ำกันได้ ถ้าอยู่ต่างclassกัน)
      
        ข้อกำหนดของการตั้งชื่อ class ในจาวาคือ ชื่อจะต้องไม่ซ้ำกันในแต่ละโปรแกรม ซึ่งเมื่อมีการสร้างโปรแกรมมากขึ้น โอกาสที่ชื่อclassจะซ้ำกันมีสูง เพื่อหลีกเลี่ยงปัญหานี้ จึงมีคำสั่ง "Package" เพื่อใช้เก็บรายชื่อ Class ต่างๆ ที่ใช้ทำงานประเภทเดียวกันไว้ด้วยกัน เมื่อต้องการใช้งาน Class ใดๆ ก็สามารถเรียกใช้ Package ที่เก็บ class ขึ้นมาในโปรแกรม จากนั้นจึงเรียกใช้ method ต่างๆใน class นี้อีกที ทำให้สามารถตั้งชื่อ Class หรือ Method ซ้ำกันได้ (ถ้าเก็บไว้ในต่าง Package กัน และไม่เรียกใช้พร้อมกัน ถ้ามีการเรียกใช้พร้อมกันในโปรแกรมเดียวกัน เมื่อ compile โปรแกรมจะไม่มีผลใดๆ แต่เมื่อเรียกใช้งานโปรแกรมนี้ เมื่อใดจะเกิด Error ฟ้องมาทันที)

     การใช้คำสั่ง "Package"     
                   package MyPackage;

     โดย 
            package            เป็นคำสั่ง
            MyPackage      เป็นชื่อ Package ที่ตั้งขึ้นมา โดยชื่อ Packageนี้จะเป็นชื่อ Directory ที่ใช้เก็บชื่อ Class ต่าง (.class) เช่น จากตัวอย่างจะต้องสร้าง Directory ชื่อ MyPackage ขึ้นมาด้วย โดยโปรแกรมที่ compile เสร็จแล้วให้นำมาเก็บไว้ใน Directory ที่ระบุไว้ในคำสั่ง Package ด้วย
           ระวัง! ชื่อ Package ต้องตรงกันทั้งตัวอักษรพิมพ์เล็กและพิมพ์ใหญ่
           กรณีที่ต้องการสร้าง Package แบบลำดับชั้น (คือมี subdirectory) ให้ใช้เครื่องหมายจุด(.)คั่นระหว่างชื่อด้วย


                 Ex.                                      package SNSD.pics.Sunny;

                - โปรแกรมที่ compile เสร็จ จะต้องเก็บไว้ใน directory ชื่อ "SNSD\pics\Sunny" เท่านั้น



การป้องกันใน Package
          
            ในการเรียกใช้ method ต่างๆของแต่ละ class หรือแต่ละ package นั้น จะมีการกำหนดค่า Accessibility ไว้ด้วย ทั้งนี้จะแยก Class ออกเป็น 5 กลุ่ม ได้แก่
            1. class เดียวกัน
            2. subclass ใน package เดียวกัน
            3. ไม่เป็น subclass แต่อยู่ใน package เดียวกัน
            4. subclass ที่อยู่ต่าง package เดียวกัน
            5. class ที่อยู่ต่าง package กัน และไม่เป็น subclass
           
            สำหรับค่า Accessibility แบ่งออกเป็น 4 ชนิด ได้แก่
           1. Public         เรียกใช้ variable หรือ method ได้ไม่ว่าอยู่ class หรือ package ใดก็ตาม
           2. Private        เรียกใช้ variable หรือ method ได้เฉพาะภายในclass เท่านั้น class อื่นเรียกใช้ไม่ได้
           3. Protect       ใช้ได้เหมือน Public รวมทั้ง class ที่เป็น subclass แต่กรณีที่อยู่ต่าง package กัน จะใช้ไม่ได้
           4. Default        กรณีที่ไม่กำหนดค่า Accessibility ไว้ จะหมายถึงค่า default โดยจะใช้ได้เฉพาะ class และ subclass ที่อยู่ใน package เดียวกัน (ต่าง package จะใช้ไม่ได้)


ตารางในการสรุปความสามารถในการเรียกใช้ variable หรือ method ร่วมกันของ class และ subclass ต่างๆ

วันศุกร์ที่ 1 กรกฎาคม พ.ศ. 2554

การสร้าง Bean ใน NetBeans

การสร้าง Bean ใน NetBeans
 1. สร้าง Projectใหม่ ไปที่ File -- New Project


2. เลือก Java Application หลังจากนั้น กด Next


 3. ตั้งชื่อโปรเจ็คที่ต้องการเลือกพื้นที่ที่จะบันทึก จากนั้นให้กด Finish


4. click ขวาที่ชื่อโปรเจ็ค ทางด้ายซ้ายมือ แล้วทำการเลือก New -->>JFrame Form


5. ตั้งชื่อ Class แล้วกด Finish

6. ทำการ import file beans เข้ามาใน NetBeans ให้เลือก Tool-->>Palatte-->>AWT Components


7. ทำการคลิ๊กที่ Add from JAR


8. จากครั้งที่แล้วที่ได้สร้างโปรแกรม CounterBeans ที่นำมาประกอบมี OurButton (อยู่ใน buttons.jar) , Counter (อยู่ในCounter.jar)และ TickTock(อยู่ใน misc.jar) ทำการเลือกไฟล์ .JAR ทั้ง3ไฟล์แล้วกด Next


9. โปรแกรมจะแสดงตัว Beans ทั้งหมดจากไฟล์ .JAR ถ้าไม่พบไฟล์ที่ต้องการ ให้เลือกติ๊กที่ Show All JavaBeans ด้านล่างก่อนแล้วเลือก Beans ที่ใชั้ทั้ง 3 ตัว คือ Counter ,OurButton, TickTock ตามภาพ


10. จะแสดงผลใน Category ใด เลือกใส่ไว้ใน Beans กด Finish


 หมายเหตุ >> จะพบว่า Beans ทั้งหมดถูก import เข้ามาในกล่อง Palette ช่อง Beans ด้านขวามือบน

11. . ต่อไปเป็นการประกอบตัวหน้าตาโปรแกรม โดยการลาก Beans ที่ Import เข้ามาจัดวางลงในหน้าต่างส่วนกลาง โดยเริ่มต้นที่ลากปุ่มมาใส่จาก Beans OurButtonตั้งค่า Propertie ในกล่องด้านขวามือ ช่อง Label เพื่อเปลี่ยนข้อความบนปุ่ม
สร้าง 3 ปุ่มคือ Start Stop และ Reset


 12. ลาก Counter มาจัดวาง แล้วทำการปรับขนาดให้เรียบร้อย


 13.  ทำการลาก TickTock มาวาง ซึ่งจะไม่ปรากฏบนหน้าต่าง Interface
ปรับค่า Intervalในกล่อง Properties ด้านขวามือเป็น 1 (เพิ่มขึ้นทีละ1)


14.กล่อง Inspector ด้านซ้ายมือล่าง คลิกขวาที่ tickTock1 (ตัว Object Beans TickTock)
เลือก Events -- PropertyChange -- propertyChange


15.  มันจะสร้าง Method tickTock1PropertyChange ซึ่งสามารถเรียกใช้งาน Eventได้ ทำการเรียก increment มาใช้งาน โดยเขียนเป็น ชื่อ Counter.increment(); (ชื่อCounter ของเราคื่อ counter1 จากข้อเมื่อกี้ได้กล่าวไว้)
 

 16. ต่อไปเป็นการกำหนด Event ให้กับปุ่มทั้ง 3คลิกขวาที่กล่อง Inspector ด้านซ้ายมือล่าง เลือกปุ่มแรกที่ชื่อว่า ourButton1 เลือก Events -- Action -- actionPerformed

17. มันจะสร้าง Method ให้เหมือนเดิม กำหนดให้ Counter เริ่มทำ ใช้คำสั่ง ชื่อCounter.start();

อีก 2 ปุ่มทำเหตุการณืเดียวกันแต่เปลี่ยนคำส่ง Event เป็น
ชื่อCounter.stop();
เพื่อหยุด และ ชื่อCounter.reset(); เพื่อเคลียร์ค่า
 18. เสร็จแล้วทำการเปิดดูโปรแกรมด้วยการคลิกขวาที่ Form เลือก Run File หรือกด Shift + F6


สุดท้ายจะได้ผลลัพธ์ของโปรแกรม : กดStop เพื่อหยุด, กดResetเพื่อเคลียร์ค่าเป็น0,กดStartเพื่อเริ่มใหม่



วันพุธที่ 29 มิถุนายน พ.ศ. 2554

การนำ Bean มาใช้ใน Bean Box

หลังจากนั่งมึนๆงงๆ กับ data warehouse ที่ยังไม่เสร็จจนถึงตอนนี้ ผมก็เลยตัดสินไม่ทำแล้วมานั่งเขียน Blog ดีกว่าครับ วันนี้เราจะพูดถึง BeanBox คือโปรแกรมช่วยสร้างโปรแกรมโดยการลากว่าง และเราสามารถเพิ่ม Bean เข้าไปในโปรแกรมได้ครับ ในตัวอย่างต่อไปจะเป็นการนำเอา Counter จาก Blog ที่แล้วมาใช้ ไปดูวิธีการกันเลยครับ
1. นำ JAR ไฟล์ที่เป็น Bean ใส่ไว้ในโฟลเดอร์ beans\jars ในตัวอย่างจะเป็น Counter.jar

2. กลับไปที่โฟลเดอร์ \beans\beanbox ดับเบิลคลิก run.bat โปรแกรมจะรันขึ้นมาได้ดังภาพ
สังเกต ToolBox ด้านซ้ายมือจะมี Bean ชื่อว่า Counter ซึ่งเป็น Bean ที่ได้เพิ่มเข้าไปจากในข้อ 1
3. ทำการเพิ่ม Bean Counter เข้ามาใน BeanBox โดยคลิกที่ Bean ที่ต้องการใน ToolBox และมาคลิกที่ตำแหน่งที่ต้องการใน BeanBox
4. สร้างปุ่ม ExpliciButton จำนวน 3 ปุ่ม โดยวิธีเช่นเดียวกับ ข้อ 3 จะได้หน้าตาโปรแกรมดังภาพ

5. ทำการเปลี่ยน Label ของปุ่มทั้งสามปุ่ม โดยการแก้ไขค่า label ในหน้าต่าง Properties
6. แก้ไข Label อีกสองปุ่มที่เหลือเป็นดังภาพ

7. เพิ่ม Bean TickTock เข้ามาใน BeanBox และกำหนด Properties interval เป็น 1
8. ทำการกำหนด Event ให้กับปุ่ม เริ่มต้นที่ปุ่ม Start โดย การคลิกที่ปุ่ม และเลือก Edit > Events > button push > actionPerfrom
คลิกที่ Counter
จะพบหน้าต่าง EventTargetDialog ให้เลือกที่ start
9. ทำการกำหนด Event ของอีกทั้งสองปุ่มเช่นเดียวกับปุ่ม Start ในข้อ 8 แต่ ปุ่ม Stop เลือก method stop และ ปุ่ม Reset ให้เลือก method reset

10. ทำการกำหนด Event ให้กับ TickTock โดยการคลิกที่ TickTock และเลือก Edit > Events > propertyChange > propertyChange และคลิกที่ Counter ดังภาพ
เลือกที่ increment ดังภาพ
11. จะสังเกตเห็นว่า Counter จะเพิ่มขึ้นทุก 1 วินาที และเมื่อทดลองกดปุ่ม Stop Counter ก็จะหยุดการนับค่า เมื่อกดปุ่ม Reset ค่าก็จะกลับมาเริ่มต้นที่ 0
ถ้าทำตามขั้นตอนก็จะได้ผลดังที่กล่าวมาครับ วันนี้พอแค่นี้ดีกว่าครับ data warehouse ยังไม่เสร็จ (แย่แล้วแหละครับ = =) ขอไปทำก่อนนะครับ ติดตามได้ตอนต่อไปขอบคุณครับ