บทความที่ได้รับความนิยม

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

JAXB : Java Architecture for XML Bindings

What is JAXB ?
     JAXB เป็น Library ของ Java ที่ใช่ให้เราสามารถเก็บข้อมูลของObject ในรูปของ File XML โดยสามารถ เปลี่ยนไปมาระหว่าง XML กับ Object ซึ่งมีประโยชน์อย่างมากงานการจัดเก็บข้อมูล
JAXB Architecture
The JAXB Binding Process
Unmarshalling & Marshalling
-Unmarshalling ทำให้ client application มีความสามารถในการแปลง XML ไปเป็น Java Object
-Marshalling ทำให้ client application มีความสามารถในการแปลง      Java Object  ไปยัง XML data
Schema-to-Java Mapping



ตาราง 17-1 การ mapping JAXB ระหว่างประเภทข้อมูลของ java กับ ของ XML Schema
Java-to-Schema  Mapping

ตาราง 17-2การ mapping JAXB ระหว่างประเภทข้อมูลของ ของ XML Schema  ไปยัง Java Classes
Customizing Generated Classes and Java Program Elements
-Schema -to-Java
     ทำให้สามารถปรับแต่ง JAXB class ได้เกินข้อจำกัดของที่กำหนดไว้ของ XML ใน XML
schema เพื่อรวมข้อกำหนดของ Java เช่น class และ การ mapping ชื่อ package

-Java -to- Schema
       คำอธิบาย JAXB (JAXB annotation) ที่กำหนดไว้ในแพ็กเกจ java.xml.bind.annotations สามารถใช้ปรับแต่ง Java program elements ถึง การ mapping XML schema
Customizing Generated Classes and Java Program Elements 

ตาราง 17-4 JAXB Annotations กับ Java Class
EX Binding JAXB (Marshalling)
1.เริ่มจากกำหนดไฟล์ XML Schema
        <xs:complexType name=“cat">    <xs:sequence>            
       <xs:element name=“cat_name" type="xs:string" minOccurs="0"/>            
       <xs:element name=“cat_id" type="xs:double" minOccurs="0"/>           
       <xs:element name=" cat_age " type="xs:int" minOccurs="0"/>        </xs:sequence>  </xs:complexType>
EX Binding JAXB (Marshalling) 
     ภายใน Main Program เราจะสร้าง Object ของclass Cat โดยใช้ Factorymethodclass เป็นหนึ่งใน  ที่ถูกสร้างขึ้นจาก XML Schema
      //สร้างobject cat
            Cat c =
new ObjectFactory().createCat();
      //
ใส่ค่าให้cat
           a.setcat_name(Integer.valueOf(1));
           a.setcat_name (String.valueOf(“I_mew"));
           a.setcat_id        (Double.valueOf(2));
           a.setcat_age    (int.valueOf(3));

ใน 
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(c, 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
}
output
     <?xml version="1.0" encoding="UTF-8"   standalone="yes"?>
      <ns2:Cat xmlns:ns2="http://webservice.ar/">
            <cat_name>I_mew</Area_Seq>
            <cat_id>2</Area_Name>
            <cat_age>3</Area_Lat>
      </ns2:area>

นำไฟล์
xml ที่Marshalling มาใช้
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <ns2:area xmlns:ns2="http://webservice.ar/">
             <cat_name>I_mew</Area_Seq>
            <cat_id>2</Area_Name>
            <cat_age>3</Area_Lat>
      </ns2:area>
//สร้าง cat จาก ObjectFactory
      Cat c =
new ObjectFactory().createArea();
ใน 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://Cat.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
}
ทำส่วนแสดงผลด้วย System.out.println

      System.out.println(“show cat”)
      System.out.println(“name : "+a.getcatname());
      System.out.println(“id : "+a.getcatid ());
      System.out.println(“age : "+a. age));

output
  show cat
       name :i_mew
       id : 2
       age : 3

JAXB


ข้อดี
-ช่วยให้เราสามารถเก็บค่าของObjectที่ต้องการรูปแบบของXML
-การเก็บข้อมูลในรูปแบบXML มีความยืดหยุ่นสูง
-สามรถ อ่านFile XMLแล้วแปลงข้อมูลภายในนั้นออกมาในรูปแบบObject
-รูปแบบข้อมูลที่อยู่ในรูปXML สามรถแปลงเป็นObjectได้ไม่ว่าObjectนั้นๆจะมีการเพิ่มหรือ
ลดProperties สามารถเก็บข้อมูลได้อย่างอิสระไม่จำกัดจำนวนField
-ต้องการความรู้หลายด้านในการใช้งานพอสมควร
-เราต้องสร้างClass ที่มีโครงสร้างเช่นเดียวกับโครงสร้างใน XMLFile เอง
ข้อเสีย
-ต้องการความรู้หลายด้านในการใช้งานพอสมควร
-เราต้องสร้าง Class ที่มีโครงสร้างเช่นเดียวกับโครงงานใน XML File เอง

วันศุกร์ที่ 26 สิงหาคม พ.ศ. 2554

Google App Engine

  Google App Engine(GAE) เป็นแพลตฟอร์มไว้ให้นักพัฒนา สามารถพัฒนาโปรแกรมได้บน Google  
               Google App Engine นั้น ช่วยให้นักพัฒนาทั้งหลายสามารถเขียนโปรแกรมเข้าไปอิงกับสถาปัตยกรรมของ Google ได้ เพียงแค่มี account ของ Google  และติดตั้ง Google App Engine SDK แล้วนักพัฒนาก็สามารถเขียนโปรแกรมแล้ว deploy ไปยังระบบของ Google App Engine ได้ไม่ยาก

--------------------------------------------------------------------------------------------------------------------------
เริ่มจากเปิด Eclipse เพื่อทำการติดตั้ง Plugin กันก่อน
              ***ในที่นี้เราใช้ Eclipse indigo (v3.7)

  • เลือก Plugin และ GWT Designer for GPE และ SDKs -> next

  • โปรแกรมจะแสดงรายละเอียดที่จะต้อง install ขึ้นมา > click next
  • Click ที่ I accept .. > finish

  • โปรแกรมจะทำการติดตั้ง รอสักพัก จากนั้นก็ restart eclipse




ทดสอบ Project
1. Click ที่ File > New > Other…

2. Click ที่ Google > Web Application Project > Click next



3.  กำหนด Project name และ Package > Click finish


4. Compile และ run Project โดย Click Run > Run as > Web Application

5. Double click ที่ URL ที่ปรากฏ หลังจากนั้นก็กดที่ปุ่ม reload web server


6. จะปรากฏตาม URL ดังภาพ




เริ่มใช้งาน Google App Engine
>>เราจะทำการ deploy project ที่เราสร้างไปยัง Google App Engine โดย
1. เข้าไปสมัครลงทะเบียนใน http://appengine.google.com หรือถ้ามี Account ของ  Google อยู่แล้วก็ Login เข้าใช้ได้เลย
2. Click ที่ create application
3. จะปรากฏให้ใส่หมายเลขโทรศัพท์เพื่อส่ง code ให้ทาง SMS > Click send
4. กรอก code ที่ได้มาจาก SMS ลงไป > Click send
5. กำหนด Application ID และ Application Title แล้ว Click accept > click Create application
6. กลับมาที่ eclipse แล้ว Click ขวา ที่ package > Google > Deploy to App Engine
7. จากนั้น click ที่ App Engine project settings.. เพื่อกำหนด Application ID  > click OK
8. Click Deploy
9. รอจนกว่าทำการ deploy เรียบร้อยแล้ว สามารถลองรันได้ที่ http://testgaecomponent.appspot.com/



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

การเปรียบข้อแตกต่างของโปรแกรมและการอธิบายโปรแกรม

4.1 จงอธิบายข้อแตกต่างระหว่างโปรแกรม mouseevents และโปรแกรม mouseevents2







4.2 อธิบายโปรแกรม mouseevents2
     
      โปรแกรม mouseevents2 เป็นการทำโปรแกรมแบบ bean แบบใช้ class Info เพื่อเป็นการอธิบาย class ที่เป็นในรูปแบบขอbean เช่น

          MouseReceiver2      มีclassที่อธิบายการทำงานของ bean คือ MouseReceiver2BeanInfo

โดยจะต้องมีรูปแบบในการตั้งชื่อคือ ชื่อclass   Beanตามด้วยคำว่าBeanInfo

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

Java Bean ใน Eclipse

JavaBeans ใน Netbeans

  
 Howdy!  คราวนี้เรื่องราวที่เราสนใจก็ยังอยู่ที่ JavaBeans ค่ะ ไฟล์ .jar ที่ได้ใช้ Beanbox ครั้งที่แล้ว   จะนำมาใช้ด้วยในครั้งนี้    เราจะใช้ netbean เขียนโปรแกรมที่แสดงการนับ โดยจะนับทุกๆ 1 วินาที และทำงานดังนี้
-        เมื่อกดปุ่ม Start จะเริ่มนับ
-        เมื่อกดปุ่ม Stop จะหยุดที่วินาทีนั้น
-        เมื่อกดปุ่ม Reset จะตั้งค่าเริ่มใหม่เป็น 0

JFrame Form 
สร้าง Java Project ที่ยังไม่มี class ใดๆและสร้าง class ที่มี JFrame Form โดย click ขวาที่ <default package>  แล้วเลือก New  -> JFrame Form…

            Adding Java Beans
      ที่ Palette  click ขวา แล้วเลือก Palette Manager…

    
     เมื่อได้หน้าต่าง Palette Manager  แล้ว เราจะเพิ่ม file .jar มาไว้ที่  categories ชื่อ beans
  
  
เพิ่มโดยเลือก Add from JAR…  ->  เลือก file .jar ->  เลือก components ที่จะเพิ่ม ->  เลือก Palette Categories

Palette Categories จะเลือกเป็น Beans ทุกครั้ง 

Components ที่จะเพิ่มมี 2 beans ดังนี้
     - Counter bean ใน Counter.jar  ใช้การนับและแสดงจำนวนที่นับ
     - TickTock bean ใน misc.jar ที่โหลดมาได้จาก ……   ใช้เป็นนาฬิกา

Connecting Counter &TickTock bean
 
ลาก Counter bean และ  TickTock bean  มาวางใน form 


             เพื่อนๆจะไม่เห็น TickTock bean ใน form แต่จะเช็คได้จาก Inspector ด้านมุมซ้ายล่าง  เพื่อนๆจะเปลี่ยนชื่อตัวแปรได้ที่ส่วนนี้ เราตั้งชื่อ Counter bean  เป็น  counter และ  TickTock bean  เป็น time ดังภาพ
 
            ปุ่ม Connection Mode  ใช้ในการเชื่อมการติดต่อ เมื่อกดปุ่ม connection mode  แล้วเลือก object ที่สร้างเหตุการณ์และ object ที่รับเหตุการณ์  เช่น ถ้าเราต้องการติดต่อ A กับ B โดย A จะเป็นผู้สร้างเหตุการณ์  และ B สนใจเหตุการณ์ที่เกิดขึ้น (B จะได้รับการแจ้งเตือนเมื่อ A)   
           เมื่อจะให้ counter ดูเหตุการณ์ของ time เราทำอย่างนี้ค่ะ Click connection mode  ->  เลือก time ->  เลือก counter  เมื่อหน้าต่าง Connection Wizard ปรากฏขึ้น ขั้นแรกให้เลือก Event ที่ time สร้างก่อน ตามด้วย method ที่ใช้ในการจัดการ event นั้นตามรูป


  
    Click Next>
         ขั้นต่อมาให้เลือก operation ที่จะทำเมื่อ event  ที่เลือกไว้เกิดขึ้น  เราจะให้เรียก method ชื่อ increment()  ตามรูปด้านล่าง

 
      เสร็จแล้วเมื่อกด Finished  netbean จะสร้าง code ให้เราโดยอัตโนมัติ
     
          Click ขวาที่ time ใน inspector  ->  ที่ Properties ใน interval ในหน้าต่างให้เปลี่ยนค่าจาก  5 เป็น 1 เพื่อให้ time property เปลี่ยนทุก  1 วินาที
 


                          Start, Stop & Reset
                   ต่อไปให้ลาก button ใหม่มา 3 button ตั้งชื่อว่า Start , Stop และ Reset
 ใช้ Connection mode เชื่อม button ทั้ง 3 กับ  counter   โดยสำหรับทุกปุ่ม method ที่ใช้จัดการคือ actionPerformed()
-ระหว่าง Start button กับ  counter
    Operation ที่จะทำเมื่อ event  ที่เลือกไว้เกิดขึ้น ( Specific Target Opertion) คือเรียก method start()
-ระหว่าง Stop button กับ  counter
    Operation ที่จะทำเมื่อ event  ที่เลือกไว้เกิดขึ้น ( Specific Target Opertion) คือเรียก method stop()

-ระหว่าง Reset button กับ  counter
    Operation ที่จะทำเมื่อ event  ที่เลือกไว้เกิดขึ้น ( Specific Target Opertion) คือเรียก method reset()
เรียบร้อยแล้ว code ทั้งหมดที่ netBean สร้างให้จะเป็นตามนี้

ในที่สุด โปรแกรมก็รันได้แล้วค่ะ

 
       เมื่อรันโปรแกรมจะเริ่มนับเลยนะค่ะ แต่ถ้าเพื่อนๆ ไม่อยากให้โปรแกรมนับ จนกว่าจะกดปุ่ม start ก็เติม code ที่ MyForm()  constructor อย่างนี้เลยค่ะ