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

++Using Session Bean ++

     เราจะมาสาธิตวิธีการใช้ session bean ในการแปลงอุณหภูมิฟาเรนไฮต์เป็นเซลเซียลน่านะ 
   
         1. สร้าง Project Java EE ขึ้นมาใหม่โดยเลือก Java EE ตามด้วย Enterprise Application

    
2.   ติ๊กถูกหน้า Create EJB Module ให้ netbean สร้าง bean ให้เรา และหน้า Create Web Application Module เพื่อให้ netbean สร้าง web client


3. ที่ ConvertTemp-ejb สร้าง session bean ขึ้นมาตามภาพเราตั้งชื่อว่า ConvertSessionBean เลือก interface แบบ local นะ

4. ที่ไฟล์ ConvertSessionBean.java เข้าไปเพิ่ม method ที่รับอุณหภูมิฟาเรนไฮต์มาแปลงเป็นเซลเซียลแล้วคืนค่ากลับไป โดยเพิ่ม business method ก่อนนะจ๊ะ

แล้วแก้ code ใน method convertFarenToCels  ตามภาพเลยค่ะ


5.  ส่วนที่ไฟล์ ConvertSessionBeanLocal.java ต้องเพิ่ม interface ที่มี method signature เหมือนกับในไฟล์ ConvertSessionBean.java


สร้าง  session bean เรียบร้อยแล้วค่ะ

6.  ต่อมาเราจะสร้างส่วนของ client ที่จะมาติดต่อกับ bean โดย  client จะอยู่ในรูปของ JSP ที่จะติดต่อกับ  servlet แล้ว  servlet จะติดต่อกับ bean ของเราอีกต่อหนึ่ง 

                           ที่ไฟล์ index.jsp  ที่อยู่ในส่วนของ  web client   ที่ชื่อ ConvertTemp-war เราจะสร้าง form เพื่อใช้รับค่าอุณหภูมิฟาเรนไฮต์มาจากผู้ใช้  โดยส่วนที่เติมใน Action: คือไฟล์ที่จะส่งต่อค่าอุณหภูมิฟาเรนไฮต์ไปให้และถูกเรียกมาทำงานเมื่อปุ่มถูกกด  เราจะส่งค่าไปให้ servlet  ที่ชื่อ myServlet เมื่อกดปุ่ม   และตั้งชื่อ form ว่า myForm 



7.  ใน form เราจะใส่กล่องเพื่อรับค่า ตั้งชื่อกล่องว่า text และใส่ปุ่มชื่อว่า submit

สร้างกล่องสำหรับใส่ข้อความใน form

สร้างปุ่ม


เราจะได้ form ที่สมบูรณ์แล้วค่ะ ตาม code ดังนี้

8.  สุดท้าย เราจะสร้าง  servlet  ที่ควมคุมการติดต่อระหว่าง client(index.jsp) กับ  bean(ConvertSessionBean.java )
   
    สร้าง servlet ขึ้นมาใหม่

 ตั้งชื่อว่า myServlet ให้ตรงกับที่ใส่ไว้ใน action: ของ form



9. ในไฟล์ myServlet.java   ใส่  code   เรียก  bean  โดยคลิ๊กขวาแล้วเลือก Insert Code… -> Call Enterprise Bean.. แล้วเลือก bean ที่จะใช้งาน

จะได้ code ดังนี้


10.  ต่อไปเราจะรับค่าอุณหภูมิฟาเรนไฮต์ที่ client ป้อนมาในกล่อง โดยรับจากกล่องชื่อ text ที่เราตั้ง ตามคำสั่ง  (1)   และใส่คำสั่ง (2) เพื่อแปลงค่าอุณหภูมิเซลเซียลที่รับมาจาก string เป็น double   
แล้วจึงนำค่าอุณหภูมิเซลเซียลที่เป็น double แล้วมาใช้เป็น parameter ที่จะส่งไปเรียก method ของ ConvertSessionBean ผ่าน interface 
ConvertSessionBeanLocal

 
เท่านี้โปรแกรมก็ทำงานได้แล้วค่า…….



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

MouseEvent VS MouseEvent2 !!!

จั่วหัวอาจจะงงเล็กน้อย...สำหรับบทความนี้จะกล่าวถึงการ config ค่าเพื่อให้ Bean ของเราแสดงหรือซ่อน Properties,Event,Method ตามที่เราต้องการได้ครับ
สำหรับความแตกต่างของ MouseEvent และ MouseEvent2 นั้นคือ MouseEvent2 จะมีไฟล์ชื่อ MySource2BeanInfo และ MyReciever2BeanInfo อยู่            สำหรับไฟล์ MySource2BeanInfo  นี้เมื่อเปิดเข้าไปดู จะพบ Method คือ PropertyDescriptor, EventSetDescriptor, MethodDescriptor ดังภาพ โดยเราจะเห็นว่า PropertyDescriptor, MethodDescriptor นั้นมีการ return array ว่างๆกลับไปซึ่งหมายถึง เราไม่ต้องการแสดง Property และ Method ของ MySource2
ส่วน EventSetDescriptor นั้น จะเห็นว่า array ที่ return กลับไปนั้น มีค่าอยู่ เป็น Event ที่เราต้องการแสดง
โดยชื่อของ Event จะอยู่ใน  String mnames[] = {….,….,….} (ตรงนี้สามารถกำหนดได้ว่าจะให้มี Event ใดบ้าง)



                ถ้าหากเราลบคำสั่งต่างๆ ใน EventSetDescriptor ซึ่งจะทำให้ EventSetDescriptor นั้นเหมือนกับ PropertyDescriptor, MethodDescriptor คือ ไม่มีการแสดง Event ของ MySource2 ออกมาเลย

*หมายเหตุ เราสามารถแก้ไข Properties,Event,Method ของ Myreciever ได้ตามวิธีด้านบนเช่นกัน

JAXB !!!

JAXB คืออะไร?
JAXB (The Java Architecture for XML Binding) เป็นส่วนหนึ่งของ JAX API ใน Java EE เพื่อใช้ในการแปลงไปมาระหว่าง XML Schema กับ โครงสร้างข้อมูลในภาษา Java และ แปลงไปมาระหว่าง XML Document กับ Object ในภาษา Java โดยปัจจุบัน JAXB อยู่ที่ Version 2.0

ทำไมจึงต้องใช้ JAXB?
การใช้งาน XML file เพื่อที่จะทำงานหรือเขียนโปรแกรมร่วมกับภาษา Java นั้นเป็นเรื่องยาก ถ้าจะต้องเขียนโปรแกรมเพื่อดูแลจัดการกับ XMLfile เหล่านั้นหรือทำการแปลง XML file เหล่านั้นให้เป็นโครงสร้างในภาษา Java   JAXB จึงเป็นทางเลือกหนึ่งในการที่จะดูแลจัดการกับ XML file เหล่านั้นเพื่อมาทำงานร่วมกับภาษา Java ได้อย่างง่ายดาย โดยการใช้ JAXB ทำให้สามารถทำงานกับโครงสร้างและเอกสาร XML ได้ โดยไม่ต้องรู้ถึงโครงสร้างและกระบวนการทำงานภายในของ XML file  นอกจากนี้ JAXB ยังมีกระบวนการในการตรวจสอบ (Validation) ซึ่งเป็นกระบวนการที่สำคัญในการทำงานร่วมกับ XML file และทำให้มั่นใจได้มากขึ้นในกระบวนการแปลงไปมาระหว่าง XML กับ Java
JAXB Architecture


JAXB Component ประกอบไปด้วย
             Schema Compiler เป็นกระบวนการที่แปลง Schema ที่ใช้อธิบาย XML หรือข้อมูลของ XML ไปเป็น Java
             Schema Generator ทำการเปลี่ยนข้อมูลจาก Java ให้ไปเป็น Schema
             Binding runtime framework เป็นชุดคำสั่งที่ใช้ในการจัดการกระบวนการ unmarshalling และ marshalling

JAXB Binding Process


- Generate classes : XML Schema จะเป็น input ของกระบวนการในส่วนของ JAXB binding compiler เพื่อที่จะสร้าง JAXB classes โดยมีโครงสร้างตาม Schema ดังกล่าว
- Compile classes : ทุก class ที่ถูกสร้างขึ้น ,ไฟล์ต่างๆ รวมถึง source code ต่างๆ จะถูกนำมา Compile
- Unmarshal : เอกสาร XML ที่ถูกสร้างขึ้นโดยอ้างอิงจากข้อกำหนดใน Schema จะถูกนำมาทำการ unmarshal โดย JAXB Binding framework นอกจากนี้ JAXB ยังสนับสนุนในการทำ unmarshall XML data จากแหล่งข้อมูลอื่นๆนอกจากไฟล์หรือเอกสารต่างๆ เช่น DOM nodes , String buffer , SAX sources เป็นต้น
- Generate content tree : ในการทำ unmarshalling จะมีกระบวนการในการสร้างโครงสร้างต้นไม้สำหรับ object ข้อมูล โดย object เหล่านี้จะถูกสร้างขึ้นจาก JAXB classes ที่กล่าวมาในขั้นตอนที่แล้ว
- Validate (optional) : ในกระบวนการ unmarshalling  ยังสามารถตรวจสอบความถูกต้องของเอกสาร XML ก่อนที่จะนำไปสร้างเป็น content ในขั้นตอนต่อไป โดยหากเรามีการแก้ไข content tree ในขั้นถัดไป เราก็สามารถใช้กระบวนการตรวจสอบดูว่ามีความถูกต้องหรือไม่ ก่อนที่จะแปลง content tree กลับเป็นเอกสาร XML
- Process content : Application ทางฝั่งของ Client สามารถที่จะแก้ไขข้อมูลXML ที่ถูกจัดอยู่ในรูปแบบของโครงสร้างต้นไม้ได้
- Marshal : โครงสร้างต้นไม้ที่ผ่านกระบวนการมานั้นจะได้เป็น เอกสารXMLซึ่งเนื้อหาของเอกสาร จะถูกตรวจสอบก่อนที่จะทำการแปลง


ตัวอย่างประเภทข้อมูลในการแปลง Schema-to-Java
XML Schema Type
Java Data Type
xsd:string
java.lang.String
xsd:integer
java.math.BigInteger
xsd:int
int
xsd:double
double
xsd:time
javax.xml.datatype.XMLGregorianCalendar
xsd:anySimpleType
java.lang.Object  /  java.lang.String

ตัวอย่างประเภทข้อมูลในการแปลง Java-to-Schema
Java Class
XML Data Type
java.lang.String / java.net.URI
xs:string
java.math.BigInteger
xs:integer
java.util.Date / java.util.Calendar
xs:dateTime
java.lang.Object
xs:anyType
javax.xml.datatype.Duration
xs:duration
java.awt.Image
xs:base64Binary