Tuesday 31 July 2007

การติดตั้ง Oracle Container for Java 11g

วิธีการติดตั้ง OC4J 11g นั้นยังเหมือนกับเวอร์ชั่นก่อน ๆ ทุกประการครับ

1. unzip ไปยัง path ที่ต้องการ, ของผมวางไว้ที่ c:\oracle\oc4j1111



2. ระบุ JAVA_HOME และ ORACLE_HOME



C:\oracle\oc4j1111>set JAVA_HOME=C:\java\jdk1.7.0

C:\oracle\oc4j1111>set ORACLE_HOME=C:\oracle\oc4j1111

3. ไปที่ /bin แล้ว run

oc4j -start



4. จะแจ้งให้เราระบุ oc4jadmin password



5. เสร็จเรียบร้อย, เข้าไปที่ URL http://127.0.0.1:8888
จะเจอหน้าตาที่คุ้นเคย


Friday 27 July 2007

เกร็ดเล็ก ๆ น้อย ๆ เกี่ยวกับเวอร์ชั่นของ Oracle


อย่างที่รู้กันว่า Oracle ได้เปิดตัว Database 11g ไปแล้วเมื่อปลายเดือนที่ผ่านมา
ถึงแม้ว่าตัวผลิตภัณฑ์จริง ยังไม่มีให้ใช้งานก็ตาม
วันนี้เอาเกร็ดเล็ก ๆ น้อย ๆ เกี่ยวกับ Oracle มาฝากนะครับ เริ่มต้นนับตั้งแต่เวอร์ชั่น 6

  • Oracle6 ออกเมื่อปี 1988
  • Oracle7 ออกเมื่อปี 1992, ใช้เวลา 4 ปีจากเวอร์ชั่น 6
  • Oracle8 ออกเมื่อปี 1997, ใช้เวลา 5 ปีจากเวอร์ชั่น 7
  • Oracle8i ออกเมื่อปี 1998, ใช้เวลา 1 ปีจากเวอร์ชั่น 8
  • Oracle9i ออกเมื่อปี 2001, ใช้เวลา 3 ปีจากเวอร์ชั่น 8i
  • Oracle10g ออกเมื่อปี 2004, ใช้เวลา 3 ปีจากเวอร์ชั่น 9i
  • Oracle11g ออกเมื่อปี 2007, ใช้เวลา 3 ปีจากเวอร์ชั่น 10g
สังเกตนะครับ, เดี๋ยวนี้ software จะมีระยะเวลาในการออกเวอร์ชั่นใหม่ ๆ สั้นลงเรื่อย ๆ

ส่วนความหมายของ i กับ g ก็คือ
  • i = internet
  • g = grid computing
ถ้าจะมีตัวอักษรถัดไป ผมขอเดาว่า f, f=fusion ครับ

เพราะช่วง 2 ปีที่ผ่านมา Oracle ไล่ซื้อ/ควบกิจการคู่แข่งไปเยอะมาก
และช่วงนี้กำลังอยู่ในระหว่างรวมความสามารถของผลิตภัณฑ์ต่าง ๆ ที่ซื้อมา
Oracle ใช้คำว่า fusion ครับ ทั้ง Fusion Applications และ Fusion Middleware

และตัวเลขเวอร์ชั่น ทั้ง Oracle Applications (E-Business Suite) และ Oracle Core-Tech กำลังจะเท่ากันแล้วด้วย
  • Oracle Applications (E-Business Suite) ขณะนี้เป็นเวอร์ชั่น 12
  • Oracle Core-Tech ขณะนี้กำลังเข้าสู่เวอร์ชั่น 11
น่าจะประมาณปี 2011 น่ะครับ, Oracle คงจะออก marketing campaign เป็นอันเดียวกัน
ทั้ง Oracle Application และ Oracle Core-Tech
เป็น Oracle Fusion หรือไม่ก็ Oracle f,
ผมเดาอีกทีว่าคงไม่ใช้เลข 13 ครับ เพราะฝรั่งเค้าถือ

ระหว่าง coding java เครียด ๆ มาลองเล่น Lyrics Plugin ให้ผ่อนคลายดีกว่าครับ

ช่วงนี้ผมและทีมงานลง project กัน, ทำงานค่อนข้างเครียดครับ
วันนี้เลยพามาดูอะไรที่ relax กันดีกว่า

อีกแล้วครับ! ค้นหาข้อมูลใน internet, อยู่ดี ๆ ก็เจอนี่ครับ
Lyrics Plugin (http://www.lyricsplugin.com/)



สำหรับคนที่ชอบฟังเพลง แล้วอยากรู้เนื้อร้อง
แค่ลง plugin นี้ บน winamp หรือ media player ก็ได้ครับ
ขณะที่กำลังเล่นเพลงนั้น ๆ, plugin นี้ก็จะไป search เนื้อเพลงมาให้ทันที ง่ายดาย!

นี่ตัวอย่าง "in my place" ของ coldplay ครับ



ใครเริ่มใช้แรก ๆ แล้วเนื้อเพลงไม่ขึ้นหรือขึ้นผิด ไม่ต้องตกใจนะครับ
สาเหตก็เพราะว่า file information ของเราไม่มีหรือไม่ถูกต้องนั่นเอง
ถ้าใน winamp ก็ rightclick ที่เพลงนั้น ๆ แล้ว update ข้อมูล title กับ artist ให้ถูกต้อง



เท่าที่ผมใช้งานมา เพลงสากลเจอ 99.9% ครับ
ส่วนเพลงไทย ยังไม่มีเลยครับ!
ต้องอาศัยพวกเราช่วยกัน update data เนื้อเพลงไทย

ว่าแล้วผมก็ update ไป 1 เพลงครับแถม chord guitar ให้ด้วย






สรุปแล้วข้อเสียมีข้อเดียวครับ คือไม่ออก net ก็ไม่มีเนื้อเพลง

Thursday 26 July 2007

แนะนำให้ลง patch 10.1.3.3 บน Oracle Application Server 10.1.3.X

ใครที่กำลังใช้งาน Oracle Application Server 10.1.3.X ดังรายการต่อไปนี้

  • Oracle Application Server 10g Release 3 (10.1.3.0.0)
  • Oracle Application Server 10g Release 3 (10.1.3.1.0), which included the Oracle SOA Suite
  • Oracle Application Server 10g Release 3 (10.1.3.2.0), which included the Oracle WebCenter Suite
  • Any Oracle Application Server 10g Release 3 (10.1.3.n) standalone installation
  • Any Oracle Application Server 10g Release 3 (10.1.3.n) that has been patched with 10g Release 3 (10.1.3) Patch Set 1 (10.1.3.1.0) or 10g Release 3 (10.1.3) Patch Set 2 (10.1.3.2.0)
คุณควรจะลง patch เป็น 10.1.3.3 นะครับ
เพราะจะแก้ปัญหา bugs ของ components เหล่านี้ทั้งหมด
  • Oracle Application Server 10g Enterprise Edition
  • Oracle Containers for J2EE
  • Oracle ESB
  • Oracle HTTP Server
  • Oracle JDeveloper
  • Oracle TopLink
  • Oracle XML Developers Kit
  • Oracle BPEL Process Manager
  • OracleAS Integration Platform
  • OracleAS Single Sign-On
  • Oracle Web Services
เท่าที่ scan คร่าว ๆ ก็ร่วมเกือบพันรายการ
รายละเอียดดูที่ metalink นะครับ patch#6148874

Wednesday 25 July 2007

ประโยชน์ของ Web Cache ที่คุณยังไม่เคยรู้มาก่อน

เวลาผมไป implement Oracle Application Server ให้ลูกค้า
ผมมักจะเจอคำถามบ่อย ๆ นะครับว่า Oracle Web Cache ไว้ทำอะไร ?
ทำไมต้องมีด้วย ? จำเป็นหรือไม่ ?

นอกจากความสามารถทางด้านการ cache data
ทำให้ response time สูลขึ้นตามที่ Oracle มักจะกล่าว

ส่วนตัวผมเอง จะได้รับประโยชน์มากที่สุดจาก Web Cache
ก็คือการเปลี่ยน port และเปลี่ยน hostname ครับ

สถานการณ์ที่เจอก็คือ
บางครั้งคนที่ติดตั้ง Oracle Application Server
ไม่ได้คิดเผื่อในกรณีที่จะใช้ออก internet จริง
ก็มักจะใช้ชื่อเครื่อง hostname เป็น default ผลลัพท์ที่ได้ ก็จะเป็น

http://intraorcl01:7777

เป็นต้น

แต่ปรากฎว่าเมื่อ implement งานจริง
พบว่ามีความจำเป็นต้องเปลี่ยนชื่อและ port ให้เป็น

http://www.sample.co.th

สรุปก็คือเปลี่ยนจาก
host: intraorcl01 เป็น www.sample.co.th
port: 7777 เป็น 80

ตัวอย่างนี้ล่ะครับ Web Cache ช่วยได้,
ส่วนวิธีการทำ ผมขอยังไม่กล่าว ณ. ตอนนี้

ประโยชน์อีกหนึ่งอย่างที่ Web Cache ทำได้ และคนส่วนมากไม่ค่อยรู้ก็คือ
มันสามารถทำตัวเป็น Software Load Balancer ได้ครับ
สถานการณ์ก็คือ
สมมุติว่าคุณมี server 2 เครื่อง และต้องการให้ 2 เครื่องนี้ช่วยกันทำงาน
โดนแบ่งกันรับ Load เครื่องละ 50:50
โดยปกติ solution ก็คือคุณจะต้องซื้อ Load Balancer มาทำในส่วนนี้
แต่จริง ๆ แล้ว Web Cache ก็ทำได้เช่นกัน
โดนให้คุณสละเครื่อง PC เก่า ๆ ก็ได้นะครับ Spec ไม่จำเป็นต้องแรงมากเท่าไหร่
ติดตั้ง Web Cache นี้ลงไป มันสามารถ config
ให้ทำงานได้เสมือนเป็น Hardware Load Balancer เลยทีเดียว

ที่สำคัญ คุณยังสามารถทำ Web Cache Cluster ได้อีกด้วย ในกรณีที่คุณมี
เครื่องที่สามารถทำ Web Cache เพิ่มได้อีก 1 เครื่อง รวมเป็น 2 เครื่อง
สำหรับในกรณีที่คุณต้องการทำ High Availability ให้กับ Web Cache
ในกรณีที่เครื่องใดเครื่อง 1 พังโดยมิได้คาดหมายครับ

หมายเหตุ: ถ้าคุณลงมือจะทำจริง อย่าลืมคิดเรื่อง license ของ Oracle ด้วยนะครับ!

Review ​หนังสือ​ SOA ​Using Java Web Services

อีกเล่มนึงที่ผมได้ซื้อมาเพื่อใช้ในการทำงาน SOA ก็คือ

SOA Using Java(TM) Web Services เขียนโดย Mark D. Hansen

2 เล่มก่อนที่ผมได้ review ไป (นาย Thomas และ For Dummies) จะเน้นแนวคิด (concept) เป็นส่วนใหญ่
จะไม่ลงรายละเอียดในการพัฒนาและ coding มากนัก
ซึ่ง SOA สามารถ implement ขึ้นมาด้วย platform ใดก็ได้ ทั้ง Java และ .NET

ส่วนงานที่ผมจำเป็นต้องใช้เป็น Java Platform ครับ

ผมจึงเลือกเล่มนี้เพราะจะให้รายละเอียดที่ลงในส่วนการ coding ด้วยภาษา Java และ Web Services

โดยเนื้อหาในเล่มนี้จะอิงกับ Java EE 5 ครับ และ Java SE 6 ใหม่มาก ๆ !

ราคาของเล่มนี้ ในไทยขายกันอยู่ที่พันกว่าบาทครับ

ถ้าใครอยากจะลองอ่าน Sample Chapter ก่อน ก็สามารถเข้าไป Download ได้ฟรี
ที่ theserverside.com ครับ

สรุปแล้ว เล่มนี้เหมาะกับ Java Developer ยิ่งนัก

บทความที่เกี่ยวข้อง

Tuesday 24 July 2007

ตอนที่ 1 Struts และ MVC


Struts คืออะไร?
Struts Framework คือการ implement model-view-controller MVC design pattern สำหรับ enterprise application ด้วย java (java ee) struts เป็นส่วนหนึ่งของ Apache Jakarta project และเป็น open source ดังนั้นคุณจึงสามารถ download library struts มาใช้งานได้ฟรีๆ Struts Framework เป็นเหมือนชุดการพัฒนา web application ซึ่งเหมาะกับหลายๆขนาด

ก่อนอื่นเราต้องเข้าใจก่อนว่า Model-View-Controlller คืออะไร?
Model-View-Controller เป็นสถาปัตยกรรมที่แบ่งส่วนต่างๆของการพัฒนา application ออกเป็น 3 ส่วนซึ่งประกอบด้วย
Model component, View component และ Controller component ซึ่งในแต่ละ component สามารถพัมนา application โดยไม่ขึ้นกับ componentใด component หนึ่ง หมายความว่า เมื่อมีการเปลี่ยนแปลง component ใด component หนึ่ง จะไม่กระทบกับ component อื่นๆ

Model ทำหน้าที่
1. รับผิดชอบการจัดการนำข้อมูลขึ้นมาจาก Database และเก็บข้อมูลไว้
2. รับผิดชอบในส่วนของ business logic ก็อยู่ใน Model เช่น การเข้าถึงข้อมูล, การยืนยันความถูกต้องของข้อมูล และ logic การเก็บข้อมูล เป็นต้น หรือบาง framework อาจจะมีในส่วนของ Business Service ด้วยอันนี้ขึ้นอยู่กับมุมมองครับ

View ทำหน้าที่แสดงผล Graphic User Interface GUI เพื่อให้ user สามารถโต้ตอบกับ application ที่เราพัฒนาขึ้นมาได้ และทำหน้าที่รับ input จาก user view ที่พูดถึงถ้าอิงกับการพัฒนา web application ก็อาจเป็นได้ทั้ง HTML, JSP

Controller เป็นตัวสื่อกลางที่ทำงานประสานกันระหว่าง Model และ View Controller ทำหน้าที่ส่ง request ที่ได้จาก Client แล้วดูว่า request นี้จะส่งไปให้ Model ตัวใด และเมื่อได้ผลลัพธ์จาก Model แล้วก็จะดูต่อว่า response ที่ได้จะส่งไปให้ View ตัวใดแสดงผล ถ้าดูตาม Struts Framework ส่วน Controller ก็คือส่วนของ ActionServlet, Action, ActionForm และ struts-config.xml

ดังที่กล่าวมาแล้วทั้งหมดจะมีหลักการทำงานคร่าวๆดังนี้คือ เมื่อ client มีการส่ง request ไปหา server request นั้นจะถูกส่งไปที่ controller จากนั้น controller จะเป็นตัวดูว่า request ทีได้นั้นจะไปเรียก model ตัวใดให้ทำงาน แล้วเมื่อ model ทำงานเสร็จจะส่ง response กลับมาที่ controller และ controller จะเป็นตัวควบคุมอีกทีว่า response นี้จะให้ view ตัวไหนแสดงผลลัพธ์ออกมาพร้อมกับข้อมุลที่ได้มาจากชั้นของ model

ถามว่าทำไมต้องออกแบบ application ตาม MVC ด้วยละ?
ตอบ ผมขอยกตัวอย่างง่าย เนื่องจากว่าการทำ enterprise application นั้นจะมีความซับซ้อนมาก สมมุติหากเราไม่ใช้ MVC เกิดเราต้องการแก้ไข view ซักหนึ่งตัวมันก็จะมีผลกระทบกับส่วนอื่นๆตามมาเช่นการดึงข้อมูล, validation data เป็นต้น แต่ถ้าเราออกแบบ application ตามแบบของ MVC การแก้ไข view แต่ละครั้งจะไม่มีผลกระทบกับส่วนอื่นๆเลย

ที่ผมพูดถึงมันหมายถึงการพัฒนา application ขนาดใหญ่ทั้งนั้น แต่ถ้าเราพัฒนา application ขนาดเล็กๆอาจจะไม่จำเป็นตัวออกแบบตามแบบของ
MVC ก็ได้ อันนี้ขึ้นอยู่กับปัจจัยอื่นๆด้วย

ทำไมต้อง Struts ด้วย?
ตอบ ผมมองว่ามันมีความยุ่งยากน้อยและเข้าใจง่าย แล้วถ้าเข้าใจ concept แล้วยังเป็นพื้นฐานกับการเข้าใจ framework ตัวอื่นๆอีกด้วยเช่น JSF ซึ่งบทความเกี่ยวกับ JSF จะมีการ update อยู่ตลอดอยู่แล้ว ถึงแม้ว่าในปัจจุบันการใช้งาน Struts Framework เริ่มที่จะหมดความนิยมแต่ถ้าเทียบกับการ learning curve ที่เข้าใจง่ายและเป็นพื้นให้กับ framework ตัวอื่นๆได้ด้วยก็นับว่าน่าสนใจที่จะเรียนรู้กับมัน

เพื่อความเข้าใจที่ลึกซึ้งขอให้อ่าน reference เพิ่มเติมเรื่อง MVC ที่ sun เขียนไว้ : http://java.sun.com/blueprints/patterns/MVC-detailed.html

ที่พูดมาทั้งหมดยังไม่ค่อยเข้าเรื่อง struts framework เลยงั้นเดี๋ยวผมจะขอต่อในตอนหน้าครับ

ปล. แอบหนีงานมาเขียน blog ~.~

บทความที่เกี่ยวข้อง

ลองดู search crystal, search engine แนวใหม่ เห็นผลลัพธ์ที่มีมิติและหลากหลาย

วันก่อนนั่งเล่น web อยู่ดี ๆ เจอนี่ครับ search crystal

เป็น search engine แนวใหม่
เป็นการรวมหลาย ๆ search engine: google, yahoo, msn, etc. เข้าด้วยกัน
แล้วเอาผลลัพธ์มาสร้างเป็น crystal เพื่อให้เห็นมิติ ที่แปลกตาขึ้น




ลอกดูผลลัพธ์ของการค้นหาคำว่า Java ดูนะครับ



ส่วนอันนี้ค้นคำว่า Oracle ครับ



ลองดูรูปนี้นะครับ, เห็นจุดที่มีหลาย ๆ สีมั้ยครับ นั่นล่ะแท่ง crystal เลยเป็นที่มาของ search crystal



idea ดีครับ แต่ผมว่าดูงง ๆ นะ

คุยเรื่อง Oracle Application Server

เนื่องด้วยงานที่ต้องทำให้ลูกค้า มักจะเป็น Oracle Platform ซะเป็นส่วนใหญ่

ถ้าจะเจาะจงลูกค้าที่ใช้งาน Oracle Application Server นั้น
มากกว่า 70% จะใช้งาน Oracle Application Server เวอร์ชั่น 10.1.2

สาเหตุที่ส่วนใหญ่ยังคงใช้ 10.1.2 ก็เพราะว่ามันมี Enterprise Edition
ที่มีทั้ง
1. Forms และ Reports Services
2. Discoverer
3. Portal
ซึ่งทั้งสามอย่างนี้ เวอร์ชั่น 10.1.3 ยังไม่มี

มีเพียงส่วนน้อยที่จะใช้ เวอร์ชั่น 10.1.3, และที่เลือกใช้ 10.1.3 ก็จะมีสองสาเหตุคือ
1. ต้องการใช้ J2EE 1.4, ซึ่งจะรวมทั้ง JSF ด้วย (ถึงแม้ว่าจะลง library เองต่อยอดจาก 10.1.2 ก็ได้)
2. ใช้ SOA

แต่ ณ. ปัจจุบัน Oracle ก็ได้ออก Technology Preview (หรือเบต้าเวอร์ชั่นนั่นเอง)
ของ Oracle Application Server 11g มาให้ทดลองใช้งานกันแล้ว (ยังเป็นแค่ Oracle Container for Java หรือ OC4J)

ซึ่งผมและเพื่อนร่วมงาน ก็จำเป็นต้องทดลองใช้งาน
เพื่อก้าวไปยังเวอร์ชั่นที่ใหม่ขึ้นพร้อม ๆ กับทาง Oracle

Monday 23 July 2007

GlassFish อีกทางเลือกของการ deploy JSF

ก่อนที่เราจะมาลงลึกใน JSF เราต้องเตรียม software เพื่อที่จะใช้ในการพัฒนา JSF กันก่อนซึ่งมีตัวที่เป็นหลักสำคัญมีดังนี้

  • JDK 5.0 หรือสูงกว่านี้

  • JSF 1.2 Framework Library หาโหลดได้ ที่นี่

  • IDE อันนี้แล้วแต่จะเลือกครับ ถ้าเอาของฟรีก็มี Eclipse กับ NetBeans ซึ่งเดี๋ยวนี้มี plug-in เสริมไม่ต้องไปหาโหลดเองแล้วใช้ง่ายดีครับ แต่ว่าถ้าอยากเอา IDE ที่รองรับทุกอย่างครบครันและฟรีก็ต้อง JDeveloper 600 กว่า Mb ครับ

  • Application Server เพื่อให้ JSF run ได้ในที่นี้เราอาจจะใช้ Tomcat Application Server ยอดนิยมก็ได้ครับเพียงแต่มันไม่มีตัว JSF 1.2 Framework Library ครับเราต้องโหลดมาแล้วติดเข้าไปเองครับหรือว่าไม่อยากยุ่งยากก็เอา Application Server ที่มี Java EE เต็มตัวเลยก็ได้ครับไม่ต้องมา add JSF 1.2 Framework Library ภายหลังเพราะว่า Java EE นั้นรอรับ JSF อยู่แล้ว
Application Server ที่จะแนะนำคือ GlassFish ครับซึ่งตัวนี้เป็นตัวของ Sun ที่น่าลองเล่นครับแต่ว่าการติดตั้งนั้นค่อนข้างยุ่งยากวันนี้เลยจะมาเสนอวิธีการติดตั้งครับ

เมื่อเราโหลด GlassFish เสร็จแล้วให้เรานำมันมา Install โดยการที่จะ Install นั้นเราต้อง run script ดังนี้
java -Xmx256m -jar filename.jar //filename.jar คือ file ที่เราโหลด GlassFish มา
เมื่อเราคลาย jar file เสร็จแล้วให้เราเข้าไปยัง directory ที่เราได้ติดตั้ง GlassFish ซึ่งถ้าเราต้องการ Start Application Server นั้นให้เราเข้าไปยัง bin แล้วจึงใช้คำสั่งนี้

asadmin start-domain <ชื่อ Domain>

โดยชื่อ Domain นี้โดยปกติในตอนแรกที่เรา install domain ที่มันให้เราแต่แรกจะเป็น domain ที่ชื่อว่า domain1 ซึ่ง domain1 นั้นเราไม่จำเป็นที่ตอ้งใส่ก็ได้เพราะว่าเป็น default ของมันแต่ถ้ามีหลาย Domain ให้เราใส่ชื่อ Domain เข้าไปด้วยในการ start

แต่ในตอนนี้ผมขอถามหน่อยว่ามีใครติด Error อะไรบ้างและ start ได้ไหมซึ่งถ้าใคร start ได้ถือว่าแปลกครับเพราะว่าถ้าลองเข้าไปดู directory ใน bin นั้นจะเห็นว่าไม่มี file อะไรเลยเพราะว่าเราต้อง run ANT เพื่อให้มันสร้าง file ต่างๆใน directory bin ซึ่งเราต้อง Run คำสั่งดังนี้

\lib\ant\bin\ant -f setup.xml

เมื่อ run เสร็จแล้วเราจึง run command line

asadmin start-domain <ชื่อ Domain>

ที่นี้ถ้าไม่มีข้อผิดพลาดใดๆเราก็สามารถ run GlassFish ได้แล้วครับให้เราลองทดสอบดูผลได้โดยเข้าไปยัง URL นี้ http://localhost:8080/ ก็จะมีข้อความบอกว่า run Application Server สำเร็จซึ่งถ้าเราต้องการที่จะเข้าไป set ในหน้า admin ก็เข้าไปใน URL นี้ http://localhost:4848/ โดย username นั้นให้เราใช้ admin ส่วน password adminadmin

เมื่อเราต้องการที่จะ stop ก็ให้ run script นี้ใน bin directory

asadmin stop-domain <ชื่อ Domain>

หวังว่าจะมีคนหันมาใช้ของฟรีอย่าง GlassFish ครับ

บทความที่เกี่ยวข้อง

ความหมายของ Latch Contention ใน Oracle Database

คนที่ทำงานเป็น oracle dba มักจะเจอกับคำว่า latch contention, เรามาทำความเข้าใจกับคำนี้กันครับ

ในส่วนของ Latch Contention ทำความเข้าใจกับความหมายก่อน
Latch สำหรับ Oracle แล้วเป็นกลไกแบบ serialize
ที่ใช้ป้องกันพื้นที่ใน Shared Memory (SGA)
ตัวอย่างง่ายๆ ก็คือ Latch ทำหน้าที่ป้องกันไม่ให้ 2 processes ทำการ update ในพื้นที่ SGA เดียวกัน ซึ่งอาจจะทำให้เกิดการเสียหายได้

เนื่องจาก Latch เป็น Serialize เพราะงั้น มันจะรองรับได้ทีละ 1 process
เมื่อ process พบว่า latch ยังไม่ว่าง ก็จะทำการ request ใหม่เรื่อยๆ
กลไกการทำงานตรงส่วนนี้ จะเร็วมาก (คิดเป็นนาโนวินาทีได้เลย)
เพราะงั้นความถี่ของ latch request จะสูงมาก

Latch ที่มักจะกระทบ Performance คือ (พวกนี้อยู่ใน SGA นะ)

  • Library cache latches: protect
  • Redo copy/redo allocation latches
  • Shared pool latches
  • Cache buffers chain latches

การพิจารณา Latch Contention ก็จะพิจารณาจาก Miss Rate (Miss from latch request) หรือบาง Script อาจจะใช้วิธีพิจารณาจากเวลาที่ใช้ในการรอ Latch เป็นต้น

Friday 20 July 2007

Review หนังสือ SOA ของ For Dummies Series


หนังสือ SOA เล่มที่ 2 ที่ผมต้องแนะนำคือ Service Oriented Architecture For Dummies ครับ
ถึงแม้ทั้งสองเล่มที่ผมกล่าวมานี้จะพูดถึง SOA เหมือนกัน, แต่อ่านแล้วได้คนละอารมณ์กับของนาย Thomas เลยครับ

เล่มนี้จุดแข็งคือ อ่านง่าย! ย่อยง่าย! ตาม style ของ For Dummies ครับ

ผู้เขียนจะพยายามยกตัวอย่าง ที่คนธรรมดาสามัญสามารถจินตนาการตามได้ง่ายครับ
เช่นเปรียบเทียบ SOA เหมือนกับการทำอาหาร, มองการ coding เหมือนการเดินท่อประปา

เล่มนี้ออกมาไม่นานนัก น่าจะยังไม่เกิน 3-4 เดือนนี้เอง แต่ผลตอบรับค่อนข้างดี
ในกรุงเทพฯ ก็เช่นเคย มีขายที่ศูนย์หนังสือจุฬา​ ฯ ​และ​ IT Book House ​ราคาประมาณ​หนึ่งพันต้น ๆ ครับ

แล้วผมก็คว้ามาเป็นเจ้าของหนึ่งเล่ม

สุดท้ายนี้ เล่มนี้ถ้าคุณค้นหาดี ๆ มีแจก ebook ใน internet ด้วยนะครับ, ค้นหากันเองละกันครับ!

บทความที่เกี่ยวข้อง

Wednesday 18 July 2007

Review หนังสือ SOA ของ Thomas Erl


ช่วงนี้ผมมีความจำเป็นต้องศึกษาเรื่อง SOA อย่างลึกซึ้งครับ,
จึงได้ไปค้นหาดูว่าใน amazon มีเล่มไหนน่าสนใจบ้าง
เล่มแรกครับที่เจอ คือ
Service-Oriented Architecture: Concepts, Technology, and Design
ของ Thomas Erl เกือบ 800 หน้า

เนื้อหาหนักแน่น ครบถ้วน!

ข้อดีที่สุดของเล่มนี้ที่ผมชอบก็คือการเขียนถึง SOA Life Cycle:

  • การวางแผน (Planning)
  • การวิเคราะห์ระบบ (Analysis)
  • เทคโนโลยีที่เกี่ยวข้องในการ implement (Technology)
  • และการออกแบบ (Design)
ซึ่งเล่มอื่น ๆ จะไม่ลงรายละเอียดถึงขนาดนี้

และที่สำคัญมีการนำ case study ที่เกิดขึ้นจริงมาแทรกอยู่ในทุก ๆ บทที่เกี่ยวข้อง
แต่ถ้าใครคาดหวังว่าจะมีสอนการ coding ในเล่มนี้, ไม่มีครับ!
แต่จะอ้างถึงในส่วนเทคโนโลยีที่เกี่ยวข้องเท่านั้น เพื่อให้เข้าใจในแนวคิด

ผู้แต่งใช้เวลาถึงปีเศษ ๆ กว่าจะเขียนเล่มนี้จบ ตีพิมพ์ครั้งแรกเมื่อปี 2005, ในสมัยที่ผู้คนยังกล่าวถึง SOA ไม่มากอย่างทุกวันนี้ (เล่มที่ผมซื้อเป็นการพิมพ์ครั้งที่ 6)

ผมจึงตัดสินใจเลือกซื้อเล่มนี้เป็นเล่มแรก, ได้ไปสืบหาดูมีขายที่ศูนย์หนังสือจุฬา ฯ และ IT Book House ราคาประมาณ 1,8XX บาท
วันก่อนผมแวะไปที่ห้องสมุดมารวยของตลาดหลักทรัพย์แห่งประเทศไทย ก็มีให้ยืมเล่มนี้เช่นกัน

บทความที่เกี่ยวข้อง

Oracle E-Business Suite (EBS) R12 ออก update packs 12.0.2 แล้ว

วันนี้มีข่าวแจ้งให้ทราบ ว่า Oracle E-Business Suite ได้ออก update packs 12.0.2 แล้ว,
โดยโมดูลที่จะถูก patch ก็จะมี

  • Applications DBA
  • Applications Technology
  • Business Intelligence
  • Customer Relationship Management
  • Financials
  • Human Resources
  • Procurement
  • Projects
  • Supply Chain Management
  • Supply Chain Planning
patch นี้จะ update จาก version 12.0.0 หรือ 12.0.1 ก็ได้ครับ,
รายละเอียดตามไปดูที่ metalink doc id: 430114.1 นะครับ
แต่คาดว่าลูกค้า Oracle EBS ในไทย คงยังไม่ได้ implment R12 กันเพราะว่ายังใหม่มาก
ส่วนใหญที่ได้พบเจอก็จะเป็น 11i, 11.5.10.2 น่ะครับ, ที่ใหม่ที่สุด

บทความที่เกี่ยวข้อง

Tuesday 17 July 2007

ในที่สุด Oracle Database 11g ก็สามารถใช้ password แบบ case sensitive ได้

ใช้งาน Oracle Database มาซะนาน,
คุณเคยสังเกตหรือไม่ว่า password ที่ใส่ไป เช่น scott/tiger มันไม่ case sensitive

แต่ใน version 11g ที่ได้เปิดตัวไปแล้วนั้น
จะเพิ่มคุณสมบัติ (features) เรื่อง security มากขึ้น ขอหยิบจาก white paper มาให้ดูนะครับ

"Increased password security with support for case-sensitive, multibyte passwords, and strong password-hashing algorithms, such as Secure Hash Algorithm (SHA-1) and salt

Additional secure-by-default configuration settings supporting password policies and audit options"

อย่างแรกที่โดนใจผมมากเลยก็คือ สามารถกำหนด password แบบ case sensitive ได้แล้ว

ถัดมาอีกคุณสมบัตินึงที่จะหยิบมาคุยก็คือใน veesion 11g นี้,
จะสามารถทำ fingerprint password ด้วย SHA-1 algorithm
โดยมีความยาวของผลลัพธ์ (message digest) ถึง 160 bit
จึงมีความปลอดภัยกว่า MD5 128 bit สูงมากครับ

บทความที่เกี่ยวข้อง

Monday 16 July 2007

ผลสำรวจชี้คนนิยม Java มากสุด

TIOBE Software ทำการสำรวจ programming language ที่นิยมมากที่สุดในเดือนกรกฎาคม โดยดูจากคำที่ใช้ค้นหาใน search engine (ดู algorithm ในการจัดอันดับ) พบว่า Java ก็ยังคงครองที่ 1 ส่วนอันดับอื่นๆ เรียงลำดับลงมา คือ C, C++, VB, PHP, Perl, C#, และ Python ตามลำดับ

ภาษาที่ตกลำดับลงมามากที่สุดคือ FoxPro ครับ ปัจจุบันอยู่อันดับ 20,
ส่วนที่แรงที่สุดในขณะนี้ก็เป็น Ruby ขึ้นมาถึง อันดับที่ 10 แล้ว

ดู top 50 programming language ได้ที่ http://www.tiobe.com/index.htm?tiobe_index

บทความที่เกี่ยวข้อง

Friday 13 July 2007

Review JSFToolbox


วันนี้กำลังหา IDE ที่เหมาะสมกับการพัฒนา web application ด้วย JSF อยู่บังเอิญไปเจอ Tool ตัวนึงเข้าซึ่งมันเป็น Tools ที่ช่วยในการพัฒนา web application ที่ดีตัวนึงเลยทีเดียว โดย Tools ตัวนี้ชื่อว่า JSFToolbox ซึ่งตัวนี้เหมาะสำหรับนักออกแบบ web จิงๆ เพราะว่ามันเป็น Tools เสริมของ Dreamweaver ดังนั้นคุณสามารถออกแบบ web site ไปพร้อมกับการ codeing ได้ไปพร้อมๆกันเลย
ซึ่งข้อดีของ Tools ตัวนี้คือ
- Managed Bean introspection
- Expression Language (EL) support
- Visual JSF Core and JSF HTML tags
- Internationalization with Message Bundles
- Syntax auto-complete
- Dynamic code hints
- Context-sensitive help
ลองไปดู demo ได้ ที่นี่
อยากลองเล่นกันแล้วใช่ไหมครับ download ได้ ที่นี่
เมื่อ download เสร็จแล้ว Install ให้เรียบร้อย แล้วเปิด Dreamweaver ตัว JSFToolbox จะ start ตัวเองขึ้นมาโดยอัตโนมัติ
แล้ว binding port 7575 ไว้ดังนั้นถ้าคุณมี service ตัวไหนใช้ port เบอร์นี้อยู่ปิดก่อนนะครับ จากนั้นก็เริ่มเขียน web applicationกันได้เลย

ปล. ใน website JSFToolbox มี JSF Tag Reference เหมาะสำหรับเป็น reference ครับเพราะมี คำอธิบาย + ตัวอย่าง เข้าใจง่ายครับ

บทความที่เกี่ยวข้อง

Thursday 12 July 2007

JSF คืออะไร? ทำไมต้อง JSF

ถ้าคุณจำเป็นต้องตัดสินใจเลือกว่าจะใช้กรรมวิธีใดในการพัฒนา Web Base Application ขึ้นมาในปัจจุบัน
คุณจะเลือกอะไรดี ระหว่าง 2 กรรมวิธี ที่กำลังเป็นที่นิยมอยู่ คือ

1. พัฒนาแบบเร่งด่วน (Rapid development)
เป็นการใช้เครื่องมือในการพัฒนาที่เห็นภาพ (Visual Development) มาใช้ในการสร้างระบบ ตัวอย่างของกรรมวิธีแบบนี้ ที่นิยมก็คือการพัฒนาของค่าย Microsoft เช่น ASP.NET เป็นต้น

2. เน้นเขียนโค้ดเองเป็นหลัก (Hard core coding)
คือการที่เราเป็นคนเขียนโค้ดเองซะเป็นส่วนใหญ่ เพื่อที่จะได้สามารถควบคุมและจัดการ environment เกือบทั้งหมด สิ่งที่จะได้มาก็คือประสิทธิภาพที่ดียิ่งขึ้นของระบบนั้น ๆ เช่น การเชื่อมต่อกับฐานข้อมูล, การทำ Connection Pool เป็นต้น ลักษณะของกรรมวิธีแบบนี้ที่เราคุ้นเคย ก็คือ Java EE (Java Enterprise Edition) นั่นเอง

ทั้งสองอย่างที่กล่าวมาต่างก็มีข้อดี ข้อเสียอยู่ในตัว
ถ้าเราเลือก Java EE, นักพัฒนาก็จะต้องคอยควบคุมทุก ๆ อย่างเอง
และบางครั้งก็เป็นเรื่องหน้าเบื่อ ที่ต้องมาเขียนโค้ดขึ้นกับมือเองทั้งหมด

แต่ถ้าเราเลือกที่จะใช้ ASP.Net ล่ะ?
ข้อดีที่จะได้ก็คือ เราจะสามารถออกแบบและพัฒนาระบบได้ง่ายขึ้นมาก
แต่ข้อเสียก็คือ เราจะควบคุม Environment ต่าง ๆ ได้ยากขึ้น
เพราะเครื่องมือนั้น ๆ ไม่ได้เปิดช่องทางเอาไว้ให้เรามากพอ

จากที่ได้กล่าวมา, Sun Microsystem จึงได้ออก Framework ที่ชื่อ JSF, Java ServerFace ขึ้นมา
เพื่อที่จะประสานข้อดีของรูปแบบการพัฒนา Web Application ทั้งสองอย่างเข้ามาไว้ด้วยกัน

โดยนักพัฒนาที่คุ้นเคยกับการเขียนโปรแกรมฝั่ง Client, เช่น Swing, AWT, หรือ SWT ของ IBM
ก็จะมองว่าการพัฒนาด้วย JSF นั้น ก็มีรูปแบบที่คล้างคลึงกัน

แต่ถ้าหากนักพัฒนามีความชำนาญ JSF มากขึ้น
ก็จะพบว่า JSF นั้นยืดหยุ่นกว่าที่คิด เพราะว่า JSF ได้เปิดช่องให้เราสามารถเข้าไปออกแบบ JSF Tag ขึ้นมาใช้งานเองได้อีกด้วย จะทำให้เราสามารถประยุกต์มาใช้งานได้มีประสิทธิภาพยิ่ง ๆ ขึ้น

และยิ่งไปกว่านั้นคนที่คุ้นเคยกับ Servlet กับ JSP มาก่อน
ก็สามารถมองได้ว่า Servlet กับ JSP เปรียบเสมือนเป็น Assembly Language
ที่อยู่เบื้องหลังของ Framework JSF นั่นเอง

Uninstall Oracle Database Software

วันนี้ผมจะมาสอนวิธีการลบ Oracle Database บน Windows อย่างถูกวิธี เคยเป็นไหมสำหรับใครที่เคยลบ Oracle Database ไปแล้ว ที่นี้ต้องการกลับมาลงใหม่ ทำไมตั้งชื่อ ORACLE_HOME เหมือนเดิมไม่ได้นั่นเป็นเพราะว่า Oracle Universal Installer ลบออกไม่หมด แล้วเราจะต้องทำยังไงละ? เดี๋ยวผมจะอธิบายทีละขั้นตอน

เริ่มกันเลยครับ
1. ให้ทำการ stop service ทั้งหมดของ oracle ลงก่อน โดยไปที่ start > Control Panel > Adminstrative Tools > Services ให้หา service ที่ขึ้นต้นด้วย oracle แล้ว stop ลงให้หมด
2. เรียก tool Universal Installer ซึ่งเป็น tool ที่ช่วยในการลบ Oracle DB โดยไปที่ start > Oracle_Oradb10g_home1 > Oracle Installation Product > Universal Installer แล้วเลือก Deinstall และเลือก product ที่เราต้องการลบในที่นี้คือ Oradb10_home1 แล้วเลือก remove ตรงนี้อาจจะไม่เหมือนกันขึ้นอยู่กับตอนติดตั้ง
3. เมื่อลบเสร็จแล้วให้ไปที่ ORACLE_HOME ที่เราได้ลง Oracle DB ไว้ ให้ลบไฟล์ที่อยู่ในนั้นให้หมด ที่ต้องทำอย่างนี้เพราะว่าเผื่อเราต้องการกลับมาลง Oracle DB ที่ ORACLE_HOME เดิม ถ้ายังลบไม่ได้อาจเพราะว่าบาง process ยัง run อยู่ให้ดูที่ Process Manager ดู process ที่ชื่อว่า javaw, opmn ถ้ามีให้ end process ทิ้งแต่ถ้ายังไม่ได้ ให้ reboot ใหม่รอบนึง
4. ไปที่ C:\Programs Files\Oracle ลบไฟล์ข้างในออกให้หมด
5. ลบ Oracle DB ออกจาก start menu
ุ6. ใกล้เสร็จแล้วครับ ต่อมาให้ลบ registy ที่เกี่ยวกับ Oracle ออกจาก windows โดยมีดังนี้ครับ

  • HKEY_LOCAL_MACHINE -> SOFTWARE -> ลบ ORACLE Key Name ออกให้หมด

7. ลบ service ทุกตัวที่เกี่ยวกับ Oracle DB โดยไปที่ start > run พิมพ์ cmd ใส่คำสั่ง sc delete ถ้าจำไม่ได้ให้ไปที่ start > Control Panel > Adminstrative Tools > Services แล้วดูตัวที่ขึ้นต้นว่า Oracle
8. reboot 1 รอบก็เสร็จเรียบร้อยแล้วครับ

Wednesday 11 July 2007

ADF Faces Rich Client

เมื่อ 2 เดือนที่ผ่านมา oracle ได้เปิดให้ download JDeveloper 11g Technical Preview,
เท่าที่ได้ทดลองใช้งาน ใน version 11g,
Oracle JDeveloper จะ support การพัฒนา RIA (Rich Internet Application) อย่างเต็มตัว
โดยจะมาพร้อมกับ ADF Faces Rich Client
ลองเปรียบเทียบดูระหว่าง "10g ADF Faces ธรรมดา" กับ "11g ADF Faces Rich Client" ดูนะครับ







บทความที่เกี่ยวข้อง

ความเหมือนที่แตกต่าง ของ JSF Value Expresstion และ Expression language (EL) ของ JSP

JSF Value Expresstion เทียบได้กับ Expression language (EL) ของ JSP
หรือมองง่าย ๆ ก็คือ Value Expression เป็น EL ของ JSF
โดยที่ EL นั้นสามารถนำมาใช้ใน JSF ได้แต่ว่ามันจะมีอะไรบางอย่างที่ต่างกัน

${...} นั้นจะมีลักษณะเป็น immediate evaluation คือจะทำงานเมื่อ aplication server นั้นกำลังประมวณผลหน้า page
ส่วน #{...} นั้นจะมีลักษณะเป็น deferred evaluation คือ Application นั้นจะอ่าน expression ตัวนี้เก็บไว้ก่อนแล้วจะทำการประมวลผล expression นั้นเมื่อต้องการที่ใช้จริงๆ

ซึ่งจากกฎด้านบนเราจะได้ว่าเราจะใช้ Value Expression ก็ต่อเมื่อเรามีการใช้ UI component
แล้วอ้างถึง properties ของ Bean
และเราจะใช้ EL เมื่อมีลักษณะการใช้ที่เป็น immediate evaluation อย่างเช่น JSTL (JSP Standard Tag Library) ซึ่งพวกนี้จะต้องทำงานไปพร้อมๆกับการประมวลผลของหน้า page นั้นๆ

บทความที่เกี่ยวข้อง

Tuesday 10 July 2007

Apache MyFaces Trinidad 1.2.1 ออกแล้ว

ถ้าใครยังจำกันได้ เมื่อปีที่แล้ว oracle ได้บริจาก ADF Faces ให้เป็น open source แก่ Apache
และได้ตั้งชื่อเป็น Trinidad,
จนถึงปัจจุบัน Apache MyFaces Trinidad ได้พัฒนาจนถึง version 1.2.1 แล้ว
โดย support JSF 1.2 ตัวใหม่ล่าสุด

หลังจากที่ได้เข้าดู demo ของ MyFaces Trinidad,
Apache ได้เปลี่ยนไปเป็นโทนสีเขียวหมด
แต่ก็ยังเหลือเค้าโครงเดิมของ oracle อยู่,
ใครเป็นแฟนพันธ์แท้น่าจะดูกันออก


บทความที่เกี่ยวข้อง

วันนี้มี presentation Oracle Database 11g มาฝากครับ

วันนี้มี presentation Oracle Database 11g มาฝากครับ
ถ้าใครอยากดู features ก่อนก็สามารถ download ไปอ่านได้ครับ

ppt นี้ได้แสดงที่งาน OpenWorld เมื่อปลายปีที่ผ่านมา
โดย Mark Townsend ซึ่งเป็นหัวเรือใหญ่ของผลิตภัณฑ์ตระกูล database ทั้งหมด

บทความที่เกี่ยวข้อง

Monday 9 July 2007

สร้าง AJAX ด้วย Dojo และ JSON

มาทำความรู้จักคร่าวๆกันแต่ละตัวก่อน
AJAX (Asynchronous JavaScript and XML) เป็นเทคโนโลยีที่ใช้ส่งข้อมูลระหว่าง web server กับ web browser โดยใช้ JavaScript
การส่งข้อมูลเป็นการส่งแบบ asynchronous คือไม่จำเป็นต้อง refresh web page ทำให้ทำงานตอบสนองผู้ใช้ได้เร็ว

Dojo - เป็นJavaScript library ทีมี API หลายอย่างให้ใช รวมทั้ง API สำหรับ HTTP request/response
เพื่อทำ AJAX ด้วย นอกจากนี้ยังมี API สำหรับ string manipulation, DOM manipulation, drag-and-drop support และ data structures

JSON (JavaScript Object Notation) - เป็นformat ข้อมูลแบบหนึ่งอยู่ในรูป text ออกแบบมาเพื่อใหเขียน และอ่านง่าย
รวมทั้งให้โปรแกรม parse และ generate ง่ายด้วย JSON จึงเป็น data-interchange language (จุดประสงค์เหมือน xml)
JSON ออกแบบมาเพื่อใช้กับ JavaScript โดยเป็น format ของdata ที่ส่งมาจาก server มี API ของหลายภาษาให้ใช้ เช่น C# ,Python, Java

มาเริ่มกันเลย
Simple HTTP Request
Example1 เป็นตัวอย่างให้ผู้ใช้ใส่ชื่อใน text field แล้ว คลิก Submit จะมี alert box ที่มีข้อความwelcome ส่งมาจาก web server ดูตัวอย่างโค้ด example1.jsp


<script language="javascript" src="js/dojo/dojo.js"></script>
<script language="javascript">
dojo.require("dojo.io.*");
dojo.require("dojo.event.*");

function onLoad() {
var buttonObj = document.getElementById("myButton");
dojo.event.connect(buttonObj, "onclick", this, "onclick_myButton");
}

function onclick_myButton() {
var bindArgs = {
url: "actions/welcome.jsp",
error: function(type, data, evt){
alert(data);
},
load: function(type, data, evt){
alert(data);
},
mimetype: "text/plain",
formNode: document.getElementById("myForm")
};
dojo.io.bind(bindArgs);
}
</script>

----------------------------------------------------------------------------------------------------------------

<body onLoad="onLoad();"><form id="myForm">
<h1>Enter Name</h1>
<p>
Please enter a name:
</p>
<input type="text" name="name"/>
<input type="button" id="myButton" value="Submit"/>
</form>
</body>
</html>

ตอนแรกก็ import Dojo libraries, import package จากนั้นกำหนด onclick event handler ให้กับ button ซึ่งแทนที่จะกำหนดโดยใช้ attribute onclick ของ tag input
เราใช้การกำหนดโดย id แทน มี onclick_myButton เป็น handler ของ id myButton
function onclick_myButtonจะเรียก welcome.jsp และรับข้อมูลที่ส่งกลับมา โดยเรียก functiondojo.io.bind() รับ parameter bindArgs
ซึ่งเป็นarrayของname/value pairs จากตัวอย่างนี้มี 5 คู่

1. url: URL ที่จะ request
2. mimetype: ประเภทข้อมูลที่ส่งกลับมา
3. load: code ที่จะทำงานเมื่อ request สำเร็จ จากตัวอย่างคือ alert(data)
4. error: code ที่จะทำงานเมื่อ request ล้มเหลว หรือเกิด error จากตัวอย่างคือ alert(data)
5. formNode: form ที่มี field value ที่จะส่งไปให้ server
ดู parameter ทั้งหมดได้ ที่นี่

เมื่อ dojo.io.bind (bindArgs) ทำงานเสร็จ load code หรือerror code จะทำงานขึ้นอยู่กับ response ที่ส่งมา load กับ error มี3 parameter

  1. type: ประเภทของ function มีค่าเป็น load หรือerror
  2. data: ข้อมูลที่ส่งกลับ
  3. evt: event object.

นอกจากนี้เราสามารถ กำหนด event handler โดยใช้ dojo.event.connect() และสร้าง function สำหรับ handling คือ
event_handler(type,data,evt) ถ้าใช้วิธีนี้ จะไม่ต้องกำหนดload codeในbindArgs

var req = dojo.io.bind(bindArgs);

dojo.event.connect(req, "load", this, "event_handler");

Using JSON to Transport Java Objects
ในตัวอย่าง 2 (http://localhost:8080/dojo_json/example2.jsp ถ้าเปิดไม่ได้แนะนำให้ลอง compile src ของ class ที่ใช้มาใหม่)
จะมี list ของชื่อหนังสือ เมื่อผู้ใช้เอา mouse ไปวาง JavaScript จะส่ง id ของหนังสือไปยัง server และรับข้อมูลหนังสือกลับมาแสดงผล
book.jsp จะรับ book id และ return Book object ในรูปแบบ JSON string ซึ่ง Book class จะมี method toJSONString()
เพื่อแปลง Book Object ให้เป็น string ตาม JSON format โดยใช้ JSON API




public String toJSONString() throws JSONException {
JSONObject jsonObj = new JSONObject();
jsonObj.put("bookId", new Integer(this.bookId));
jsonObj.put("title", this.title);
jsonObj.put("isbn", this.isbn);
jsonObj.put("author", this.author);
return jsonObj.toString();
}

ที่ file ฝั่ง client คือ example2.jsp จะสร้าง event handler สำหรับ mouseover และ mouseout โดยรับ event จาก ของรายการหนังสือ

function trMouseOver(bookId) {
getBookInfo(bookId);
}

function trMouseOut(evt) {
var bookDiv = document.getElementById("bookInfo");
bookDiv.style.display = "none";
}
function getBookInfo(bookId) {
var params = new Array();
params['bookId'] = bookId;
var bindArgs = {
url: "book.jsp",
error: function(type, data, evt){
alert("error");
},
mimetype: "text/json",
content: params
};
var req = dojo.io.bind(bindArgs);
dojo.event.connect(req, "load", this, "populateDiv");
}

function populateDiv(type, data, evt) {
var bookDiv = document.getElementById("bookInfo");
if (!data) {
bookDiv.style.display = "none";
} else {
bookDiv.innerHTML = "ISBN: " + data.isbn +
"
Author: " + data.author;
bookDiv.style.display = "";
}
}

โค้ดข้างบนใช้ content property เพื่อเก็บ parameter ที่จะส่งให้ server ซึ่งต่างจากตัวอย่างที่แล้วที่ใช้ formNode เพราะว่าตัวอย่างนี้ไม่มี form
เมื่อ request สำเร็จ จะทำงานที่ function populateDiv เพื่อแสดงผลต่อไป

สรุป
Dojo เป็นทางเลือกหนึ่งสำหรับพัฒนา AJAX application อย่างไรก็ตามยังมี JavaScript library อื่นๆอีก เช่น Scriptaculous หรือ AjaxAnywhere
แต่ว่า Dojo ยังมี library อื่นๆอีก นอกจาก ajax ซึ่งช่วยในการพัฒนา full-scale application ได้ง่ายขึ้น

บทความที่เกี่ยวข้อง

เจาะแก่น SOA ตอนที่ 3 BPEL

จากบทความก่อนหน้า ผมบอกว่า web service (WS) ก็คล้าย method แต่ว่าถูกดึงออกมาอยู่ข้างนอกลอย ๆ
ที่นี้เราจะทำอย่างไร เพื่อเรียกใช้มันเพื่อสร้าง application หรือ business process ที่ประกอบด้วย web service หลาย อัน

ก่อนอื่นขอแบ่งประเภทของเว็บเซอร์วิสเป็น 2 ประเภท

1. Atomic web service - เว็บเซอร์วิสทำงานด้วยตัวเอง ไม่จำเป็นต้องพึ่งพาเว็บเซอร์วิส
2. Composite web service - เว็บเซอร์วิสที่ต้องเรียกใช้เว็บเซอร์วิสอื่น เพื่อสร้าง service ของตัวเอง

จากนั้นเราแบ่งจุดประสงค์ของการเรียกใช้ WS เป็น 2 แบบ

1. เรียกใช้ เพราะเราต้องใช้จริงๆ ผู้เรียกมักเป็นend user client เช่น ผู้ใช้ส่งข้อมูลไปยัง WS ของบริษัททัวร์ เพื่อซื้อ packageทัวร์
2. เรียกใช้ เพราะจะไปให้คนอื่นใช้ต่อ ก็คือ Composite WS นั่นละ ต้องเรียกใช้หลายๆ WS มาประกอบกันเพื่อสร้าง service ของตัวเอง
เช่น WS ของบริษัททัวร์ เรียกใช้ WS ของโรงแรมเพื่อจองห้อง, สายการบินเพื่อจองตั๋ว และธนาคารเพื่อตัดยอดเงิน

การเรียกใช้ web service มี 2 วิธีหลักๆ ได้แก่

1. ใช้ Web service client API เช่น WSIF, WSE เป็นต้น ก็คือเราเขียน application (ด้วยJava หรือ .NET) ของเราไปตามปกติ
เมื่อถึงเวลาต้องเรียกใช้ WS ก็เรียกใช้ API แทน เหมือนกับการเขียนโปรแกรมปกติทั่วไป วิธีนี้เหมาะกับ end user client ที่เป็นผู้ใช้ปลายทางจริงๆ
เพราะไม่ค่อยมีการเปลี่ยนแปลงบ่อย และมักเรียกเพียงไม่กี่ service
อย่างไรก็ตามวิธีนี้ไม่เหมาะกับการสร้าง Composite WS เพราะเรามักใช้ Composite WS เพื่อสร้าง business process
(business process คือ บริการที่เห็นหรือสัมผัสได้โดยตรงจากผู้ใช้หรือลูกค้า และให้ผลตอบแทนกับองค์กร นั่นก็คือservice นอกสุดที่ให้บริการลูกค้าโดยตรงนั่นเอง)
ซึ่งมี business logic ซึ่งอาจเปลี่ยนแปลงบ่อยๆ นอกจากนี้ business goal ของการสร้างapplication ด้วย WS ก็เพื่อความคล่องตัว (agility) ปรับเปลี่ยนง่าย จะได้สอดคล้องกับสภาพธุรกิจปัจจุบันที่มีการแข่งขันสูง ดังนั้นการผูกแต่ละ WS ไว้ด้วยการ coding แบบเก่านั้น จึงไม่เหมาะกับการสร้าง business process ด้วย WS
ตามหลักการของ SOA

2. ใช้ WS ตัวกลาง (mediator) มาเรียกใช้ sub-WS นั่นคือใช้ BPEL (Business Process Execution Language) นั่นเอง
การจะสร้าง business process หรือ composite WS จาก BPEL ต้องประกอบด้วย 2 ส่วน ได้แก่
2.1 BPEL file - BPEL เป็นภาษาที่ไว้ใช้กำหนด business process ซึ่งจริงๆ แล้ว เป็นภาษา xml
ลักษณะของ BPEL คือ เป็น procedural language คล้ายกับ flow chart ทำหน้าที่กำหนดว่าจะเรียก WS ไหน, เมื่อไหร่ และอาจเก็บตัวแปรด้วย
การทำงานจะไปข้างหน้าเรื่อย ๆ จนจบไฟล์ (ลองนึกถึง file build.xml ของ Ant อาจเข้าใจ การทำงานคล้ายอย่างงั้นเลย)
2.2 BPEL engine คือ ตัวที่จะมาอ่าน BPEL ที่เราเขียน และ สร้าง composite WS ให้ทำงานตามที่กำหนดใน BPEL นั่นเอง (คล้าย Ant tool ที่อ่าน build.xml)
client ที่เรียกใช้จะเห็น composite WS ที่สร้างขึ้นเป็นเหมือน WS ทั่วไป
BPEL engine ปัจจุบันก็เช่นBPEL manager ของ oracle ซึ่ง vendor ส่วนใหญ่จะมี BPEL designer ติดมาด้วย เพื่อสร้างและแปลง flow chart เป็น bpel (อย่างที่บอกว่าbpel เป็นภาษาที่เหมือน flow chart อยู่แล้ว ไม่มีแยก function มี control flow แค่switch-case, loop และก็อย่างอื่นอีกนิดหน่อย สามารถดูตัวอย่างได้ที่ link อ้างอิง)

นอกจากนี้ BPEL ยังสนับสนุนการทำงานแบบ concurrent, asynchronous และ exception handling ด้วย อย่างไรก็ตาม BPEL ก็คือ procedural language
ที่ไว้ใช้สร้าง Composite web service โดยการระบุการเรียกใช้ WS อื่นๆ เพื่อสนับสนุนแนวความคิดของ SOA นั่นเอง

บทความที่เกี่ยวข้อง

เจาะแก่น SOA ตอนที่ 2 WebService กับ SOA

จากภาคแรก ผมเกริ่นเกี่ยวกับ SOA เอาไว้ ในตอนที่ 2 นี้ผมจะเขียนความเกี่ยวข้องระหว่าง SOA กัน web services

ที่ SOA เป็นพูดถึงกันมากส่วนหนึ่งก็เพราะ web services นั่นเอง ความจริง SOA ไม่ใช่ของใหม่ ถ้าเราสังเกตลักษณะของ service จะมีส่วน implementation แยกกับ interface เสมอ
เพื่อลด coupling ระหว่าง service กับผู้เรียก ซึ่งแนวคิดนี้มีใน J2EE (RMI), CORBA และ COM อยู่แล้ว นั่นคือเราสามารถใช้ RMI technology (ซึ่งเป็น distributed technology) ทำ SOA ได้

แต่ว่า จุดขายที่สำคัญของ web services คือ platform independent ผู้เรียกกับ service ไม่จำเป็นต้องเป็น platform เดียวกัน (java application เรียกใช้ .NET service) ซึ่งต่างจาก RMI ที่ต้องเป็น java หรือ CORBA ที่ต้องเป็น Java หรือ C++

ในปัจจุบันถ้า web services คือหัวใจของ SOA, XML ก็คือเส้นเลือดหล่อเลี้ยงหัวใจ เพราะ XML ทำให้ Web services เป็น platform independent technology ซึ่งช่วยให้สามารถ communicate ระหว่าง B2B หรือ new system กับ legacy system ที่เป็นต่างภาษา หรือ platform ได้

XML เป็น markup language มีลักษณะเป็น text ใครก็เปิดอ่านได้ และอ่านรู้รื่องได้ไม่ยาก ขอให้ผู้เรียกกับ service เข้าใจ xml ก็เป็น web services ได้แล้ว
ซึ่ง technology ที่เกี่ยวกับ web services ส่วนใหญ่เกี่ยวข้องกับ XML ทั้งนั้น เช่น WSDL, SOAP, BPEL

SOA กับ web services จะเป็นเครื่องมือสำคัญในการพัฒนา enterprise application ในอนาคต ด้วยจุดเด่น คือ
1. loose coupling
2. ความคล่องตัว ปรับเปลี่ยนง่าย
3. high reusability
4. ที่สำคัญช่วยลด cost ในการ mainteinence

ตามหลักการแล้ว web service สามารถเรียกข้ามองค์กร (cross organization)ได้ แต่ว่า spec บางอย่างของ Web services ยังไม่นิ่ง เช่น security, trasaction, และ QoS ต่าง ๆ
ดังนั้น การใช้ SOA ส่วนใหญ่จึงเป็นการเรียกใช้ web service ภายในองค์กรของตัวเองเท่านั้น
สิ่งที่ทำได้ตอนนี้ คือ เกาะติดความก้าวหน้าของ SOA และพิจารณาความเสี่ยงเมื่อนำ SOA มาใช้อย่างรอบคอบ เพราะ SOA ก็มีต้นทุนสูง, learning curve พอสมควร
และที่สำคัญจะได้ไม่เป็นเหยื่อคำโฆษณาของเหล่า vendor นั่นเอง

บทความที่เกี่ยวข้อง

เจาะแก่น SOA ตอนที่ 1 เริ่มต้น

วันนี้ขอเขียนเรื่องที่กำลังพูดถึงกันมากอยู่ขณะนี้ คือ เรื่อง SOA ครับ บทความนี้ผมจะแนะนำให้ทุกคนรู้จัก SOA ครับ
SOA (Service Oriented Architecture) เป็นรูปแบบในการออกแบบระบบ (system) หรือ โปรแกรมประยุกต์ (application) แบบหนึ่ง
อย่าง object oriented เวลาออกแบบระบบ เราจะมองเป็น object หรือ class
แยกแยะระบบออกมาเป็น class และความสัมพันธ์ (relations)
แต่ SOA จะมองระบบ ประกอบด้วยการทำงานหรือบริการ (service) ต่างๆ

แล้ว service คืออะไรล่ะ?
service ก็คล้าย function หรือ method นั่นแหละ คือมีหน้าที่ทำอะไรสักอย่าง ถึงเวลาเราก็เรียกใช้
แต่ service มีลักษณะ high level และเป็นมุมมองเชิงธุรกิจมากกว่า เช่น มองระบบธนาคารประกอบด้วยบริการถอน withdrawal service, บริการฝาก deposit service
แทนที่จะมองเป็น class Customer หรือ class Teller ที่มี operation withdrawal หรือ deposit

สิ่งที่ service ทำได้ แต่ method ทั่วไปทำไม่ได้ คือ distributed system
นั่นคือแต่ละ service สามารถถูกเรียกจากต่างระบบ, host หรือ JVM กันได้
แต่ละ service มีอิสระต่อกัน ไม่ได้กระจุกติดกันอยู่ใน application หรือ jar file หนึ่ง
พูดง่าย ๆ service ก็คือ method ที่ถูกดึงมาไว้ข้างนอกนั่นเอง

ข้อดีของ service คือ loose coupling และสามารถใช้ร่วมกันได้ บางคนอาจเถียงว่า method ก็สามารถใช้ร่วมกันได้
แต่ service สามารถใช้ร่วมกันระดับ application ครับ เช่น ธนาคาร A มี Deposit service
ธนาคาร B, C สามารถเขียน application มาเรียกใช้ Deposit service ของธนาคาร A ได้ นั่นคือเป็นการ reuse ระดับ high-level ขึ้นมาอีก

ตอนที่ 2 ของบทความนี้ ผมจะอธิบายความสัมพันธ์ของ SOA กับ web services ครับ

บทความที่เกี่ยวข้อง

Saturday 7 July 2007

เตรียมตัวพบกับ Oracle Database 11g

วันพุธที่ 11 กรกฎาคมนี้, oracle จะเปิดตัว database version ใหม่ 11g
feature ที่สำคัญที่ได้เคยแสดงที่งาน OpenWorld ก็จะมี
- เทคโนโลยีการบีบอัดข้อมูลที่ดียิ่ง ๆ ขึ้น
- การดึงข้อมูลขนาด 1 GB ด้วยเวลาเพียง 11 วินาที, น้อยกว่า file system ที่ใช้เวลา 12 วินาที

ตามดูการเปิดตัวพร้อมกันทั่วโลกผ่าน webcast ได้ที่

http://www.oracle.com/pls/ebn/live_viewer.main?p_direct=yes&p_shows_id=5717957

แต่ยังไม่มีการยืนยันว่าหลังจากเปิดตัว, จะพร้อมให้ download จาก otn ได้ทันทีเลยหรือไม่ครับ

บทความที่เกี่ยวข้อง

Oracle & Java Blog

วันที่ 7/7/07 เปิดตัว oracle-java.blogspot.com
Blog เราจะพูดคุยเกี่ยวกับ Technology และรวมทั้ง Oracle และ java โดยมีจุดมุ่งหมายเพื่อเผยแพร่ข่าวสารความรู้ให้กับผู้ที่สนใจเข้ามาอ่าน