วันอังคารที่ 29 พฤศจิกายน พ.ศ. 2559

AOP คืออะไร

การจะทำความเข้าใจ AOP นั้น หากจะทำให้ง่ายแล้ว ควรจะแบบเป็น 2 ระดับ นั่นคือ การเข้าใจว่า AOP คืออะไร และการเข้าใจว่า AOP ใช้อย่างไร

AOP คืออะไร? -- software developer issue
การเข้าใจตัว AOP นั้น ต้องรู้จักศัพท์ประมาณ 3 คำ นั่นคือ aspect, pointcut, advice ครับ ผมจะขออธิบายแบบเปรียบเทียบแล้วกัน สำหรับ class จะประกอบด้วย methods และ fields ใช่ไหมครับ? aspect ก็จะประกอบด้วย pointcuts และ advices ครับ

pointcut
- เป็นเหมือน regular expression (เพื่อความเข้าใจง่าย, แต่จริงๆถ้าบอกว่าเหมือนกับ XPath จะใกล้เคียงกว่า) เพื่อระบุว่า method ใดของ class ไหนบ้าง ที่อยู่ใน pointcut นี้
        pointcut greeting() :
                execution(* HelloWorld.sayHello(..));
- จากตัวอย่างข้างบน: pointcut ชื่อ greeting ซึ่งครอบคลุมทุก method ชื่อ sayHello ของ class HelloWorld ไม่ว่า return type กับ parameter จะเป็นอะไรก็ตาม

advice
- เปรียบได้กับ function ที่จะทำงาน ภายใต้ pointcut นั้นๆ จุดที่แตกต่างกับ method ของ class คือ แทนที่จะเป็น return type จะต้องระบุชนิดของ advice แทน (เช่น before, after เป็นต้น)
        before() : greeting() {
                System.out.println("Begin transaction");
        }
- จากตัวอย่างข้างบน: advice นี้คืือก่อนเข้า pointcut ชื่อ greeting ให้ run code นี้ก่อน (อธิบายให้ละเอียดขึ้นได้ว่า ก่อนเข้าทุก method ที่ถูกครอบคลุมด้วย pointcut ที่ชื่อ greeting) หลังจากที่ได้รู้จัก aspect แล้ว คงพอจะเห็นภาพว่า การทำ aspect ขึ้นมานั้น ทำให้เรามีหน่วยใหม่ ที่ใช้ในการห่อ code นอกเหนือจาก class ที่เรามีกันอยู่แล้วใน OOP นอกจากนี้ เรายังมีวิธีการ re-use code วิธีใหม่ นอกจาก composition (การเรียก method ของ class อื่น) แต่เราสามารถสร้างเป็น advices เหล่านี้ขึ้นมาแทน (การสร้าง advices เหล่านี้ โดยให้มันสัมพันธ์กับ classes ที่เราสร้างขึ้นมา เรียกว่าการ weaving aspect กลับเข้าไปยัง classes เหล่านั้น)

ประโยชน์ของ AOP คืออะไร?
AOP เพิ่มความสามารถในการทำ level of abstraction และ composition เนื่องจากเรามี type ใหม่ในการจะห่อ code (นั่นคือ aspect) และวิธีใหม่ในการเชื่อมโยง code เข้าด้วยกัน (นั่นคือ weaving) และด้วยอิสระของการ weaving นี้ ทำให้เราสามารถเขึยน code ขึ้นมาภายใต้ advice แล้วจะเชื่อมไปยัง class ไหนตรงไหนก็ได้ทั้งนั้น

AOP ใช้อย่างไร -- software architect issue
มาถึงวิธีใช้ AOP สักที นะครับ จากที่กล่าวไว้ข้างต้นว่า การ weaving นั้น เราสามารถ weave aspects เข้าไปกับจุดไหนของ architecture ของระบบเราก็ได้ ทำให้เราสามารถเขียน domain model ของระบบโดยใช้ domain model ในการห่อ business logic code แล้วค่อยๆกลับมามอง domain model ในแต่ละมุมมองที่เราสนใจ (concern) เช่น security, robustness คราวนี้เราก็สามารถสร้าง aspects ที่เกี่ยวกับ concerns เหล่านั้น แล้ว weave กลับเข้าไปยัง domain model ของเราได้ครับ

cross-cutting concern คืออะไร?
ประเภทของ concern กลุ่มหนึ่ง ซึ่งถูกมองว่ามันกระจายตัวอยู่ทั่วๆไปในระบบ เช่น security เป็นต้น ซึ่ง code ประเภทนี้ ทุกๆ components ในระบบของเราต่างต้องจัดการกับมัน คราวนี้ เราจะจัดการกับมันอย่างไรดี?
before era of AOP: เราสามารถทำได้สองทาง คือ duplicate code (developers ร้องยี๊... :: ) และสร้าง service class เอาไว้เก็น common methods เหล่านี้ แล้วให้ทุกๆ components มาเรียกใช้เอา (sw. architects ร้องยี๊... :: )
after era of AOP: สร้าง aspects เรื่องนั้นๆขึ้นมาแล้ว weave กลับเข้าไปใน domain model (sw. architects & developers ยิ้ม :D )

cross-cutting concerns เป็นสิ่งที่มองออกได้ยาก และต้องอาศัยประสบการณ์ของ software architect ระดับหนึ่ง อย่างไรก็ดี มี cross-cutting concerns ที่เป็นที่รู้จักแพร่หลายอยู่บ้าง เช่น security, logging, transaction handling เป็นต้น

Code ERROR ที่ Web server บอกคืออะไร

code error ที่ web server บอกคืออะไร

* 100 Continue (100 ดำเนินการต่อ)

* 101 Switching Protocols (101 สลับโปรโตคอล)

* 200 OK (200 โอเค)

* 201 Created (201 สร้างแล้ว)

* 202 Accepted (202 ยอมรับแล้ว)

* 203 Non-Authoritative Information (203 ข้อมูลที่ไม่ผ่านการอนุญาต)

* 204 No Content (204 ไม่มีเนื้อหา)

* 205 Reset Content (205 รีเซ็ตเนื้อหา)

* 206 Partial Content (206 เนื้อหาบางส่วน)

* 300 Multiple Choices (300 หลายตัวเลือก)

* 301 Moved Permanently (301 ถูกย้ายถาวร)

* 302 Moved Temporarily (302 ถูกย้ายชั่วคราว)

* 303 See Other (303 ดูอื่นๆ)

* 304 Not Modified (304 ไม่ได้แก้ไข)

* 305 Use Proxy (305 ใช้พร็อกซี่)

* 400 Bad Request (400 คำขอไม่เหมาะสม)

* 401 Authorization Required (401 ต้องได้รับอนุญาต)

* 402 Payment Required (402 ต้องชำระเงิน)

* 403 Forbidden (403 ถูกห้าม)

* 404 Not Found (404 ไม่พบ)

* 405 Method Not Allowed (405 วิธีการไม่ได้รับอนุญาต)

* 406 Not Acceptable (406 ไม่สามารถยอมรับได้)

* 407 Proxy Authentication Required (407 ต้องรับรองความถูกต้องของพร็อกซี่)

* 408 Request Time-Out (408 คำขอหมดเวลา)

* 409 Conflict (409 ขัดแย้ง)

* 410 Gone (ไม่มีอยู่)

* 411 Length Required (411 ต้องกำหนดความยาว)

* 412 Precondition Failed (412 ข้อกำหนดขั้นต้นล้มเหลว)

* 413 Request Entity Too Large (413 ชื่อคำขอใหญ่เกินไป)

* 414 Request-URL Too Large (414 URL คำขอใหญ่เกินไป)

* 415 Unsupported Media Type (415 ประเภทสื่อไม่สนับสนุน)

* 500 Server Error (500 ข้อผิดพลาดของเซิร์ฟเวอร์)

* 501 Not Implemented (501 ไมได้นำไปใช้)

* 502 Bad Gateway (502 เกตเวย์ไม่เหมาะสม)

* 503 Out of Resources (503 ทรัพยากรไม่เพียงพอ)

* 504 Gateway Time-Out (504 หมดเวลาเกตเวย์)

* 505 HTTP Version not supported (505 เวอร์ชัน HTTP ไม่สนับสนุน)

* 506 Variant Also Negotiates
* 507 Insufficient Storage (WebDAV)
* 509 Bandwidth Limit Exceeded (Apache bw/limited extension)
* 510 Not Extended

ที่มา : http://www.thaiseoboard.com/index.php?topic=158078.0

วันอังคารที่ 11 ตุลาคม พ.ศ. 2559

แนะนำ iBATIS O/R Mapping อีกตัวที่น่าสนใจ

แนะนำ iBATIS O/R Mapping อีกตัวที่น่าสนใจ


วันนี้มาแนะนำ OR Mapping Framework ที่น่าสนใจอีกตัวหนึ่งนั่นคือ iBATIS Data Mapper Framework ครับ

iBATIS มันคืออะไร ?
iBATIS framework คือ lightweight data mapping framwork และเป็น persistence API ที่มีความสามารถดึง database schema แล้วนำมาสร้างเป็น database persistence layer สำหรับ java application ของเรา จึงช่วยในเรื่องการติดต่อ หรือทำ transaction กับ database ที่ iBATIS น่าสนใจเพราะว่ามันใช้งานง่ายครับ สำหรับคนที่เคยเขียนเชื่อมต่อกับ database โดยใช้ JDBC เพื่อดึงข้อมูลเอาเองคงรู้ว่าไม่สนุกเลย

หลักการทำงานคือ :
ใน iBATIS layers นั่นจะประกอบด้วย 3 layer ได้แก่
SQL Maps Layer นั้นจะเก็บ SQL statement ที่เอาไว้ mapping กับ database โดยจะจัดเก็บ SQL statement ไว้ในไฟล์ XMLDAO layer ทำหน้าที่ติดต่อประสานงานระหว่าง SQL Map Layer กับ Domain classesDomain classes มีไว้เพื่อจัดเก็บข้อมูลเราที่ดึงขึ้นมาจาก database ให้อยู่ในรูปของ object เพื่อให้ application ของเรานำไปใช้งานต่อได้ทันทีโดย architectural stack จะเป็นตามนี้

เพิ่มเติมครับ :
ลองอ่านศึกษาเพิ่มเติมได้ครับhttp://ibatis.apache.org/index.htmlข้างในมีทั้งบทความและตัวอย่างลองศึกษากันดูครับหนังสือที่เกี่ยวกับ iBATIS ที่นี้รวบรวมไว้เยอะเลยทีเดียวhttp://opensource.atlassian.com/confluence/oss/display/IBATIS/Articles+and+other+coverage+of+iBATISiBATIS นั้นทำรองรับทั้ง .Net, Ruby/Rails ด้วยลองเข้าไปดูกันได้ครับiBATIS for .Net, iBATIS for Ruby/Rails

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

อะไรคือ Framework ในระดับ Enterprise

ขึ้นชื่อภาษา Java มันก็เป็นแค่ภาษานะครับ แต่ก็มีผู้เล่นในระดับใหญ่ๆของโลกได้คิดค้นสิ่งที่เรียกว่า Framework เข้ามา การที่มี Framework เข้ามาก็เพื่อควบคุมเรื่องของกรอบการพัฒนาแอพลิเคชั่นต่างๆให้มีระเบียบ เรียบร้อย แก้ไขได้เร็ว ลดเวลาการพัฒนา และที่สำคัญคือให้ทีมพัฒนาสามารถพัฒนาร่วมกันได้ ไม่ใช่ใ้ต่างคนต่างเขียนอะไรก็ไม่รู้ พอใครไม่อยู่ก็  Hell ละครับ
เมื่อมีสิ่งที่เรียกว่า Framework เกิดขึ้น พวกที่ประมาณว่าขาย Application Server หลายๆยี่ห้อ และก็ใหญ่ๆ ต่างก็มี Application Server เป็นของตัวเอง ซึ่ง Application Server เหล่านั้นก็ตั้งอยู่บนพื้นฐาน Java EE ไม่ใช่ SE นะครับ ซึ่ง Java EE นะได้มีการตระเตรียมไลบรารี่ต่างๆให้เราได้ใช้มากมาย โดยที่เราไม่ต้องเขียนเองเลยละครับ โดยเฉพาะเรื่องที่เกี่ยวข้องในระดับ Enterprise
ดังนั้นเมื่อพวกขาใหญ่ขาย Application Server ได้แล้วนั้นมันก็จะมี Framework ที่เค้าคิดขึ้นมาเอง หรือไปซื้อเข้ามา หรือควบรวมกิจการมาให้ผู้ที่ซื้อไปได้ใช้กันเพื่ออะไร ก็เพื่อที่ว่าต่อไปพวกขาใหญ่พวกนี้ทำโปรดักหรือแอพลิเคชั่นอะไรมาขาย เค้าก็จะได้อ้างว่าเพื่อความ Seamless ก็ใช้ Framework ของเค้าพัฒนาส่วนต่อขยายได้เลย
Framework ที่ออกมาให้เราได้ใช้ส่วนใหญ่ต่างยังตั้งอยู่บน On top ของ Java EE Standard อยู่ดีละครับ มันก็เลยยังเปิดโอกาสให้นักพัฒนาได้พัฒนาอะไรที่เป็นมาตรฐานเดิมๆอยู่ เช่น JSP, Servlet, Web Services,  และก็มีไฟล์ web.xml อยู่ในทุก Framework นะละครับ ซึ่งพระเอกที่ทำให้ Framework พวกนี้เกิดก็คือเจ้า Servlet นี่ละครับทำทำไรได้หลากหลายมากกๆ
เอาละครับ มาถึง Framework เจ้าใหญ่ๆที่เกาะไปกับ Application Server ในระดับ Enterprise กันนะครับว่ามันมีอะไรบ้างเท่าที่ผมพอจะรู้ แต่ผมรู้ไม่ลึกนะครับ เอาแค่ผ่านๆ เดี๋ยวก็มีคนเก่งมาอธิบายในภายหลังละกัน
ADF
Application Development Framework ตัวนี้ถือว่าเป็นตัวเอกของ Oracle เลยละครับ หลายแอพลิเคชั่นของ Oracle เริ่มทยอยเปลี่ยนมาใช้ ADF กันแล้ว ซึ่งเน้นการพัฒนาแบบ Configuration เป็นหลัก คือลากแล้ววาง ปรับค่าต่างๆ สามารถขึ้น production ได้เร็วมากถ้าไม่ได้ต้องการอะไรมากมายนะครับ ข้อเสียมันก็มีนะครับคือไฟล์ XML มันเยอะมากๆ จนน่าปวดหัว แต่บางคนเข้าใจแล้วสามารถทำ production ได้เร็วมากจริงๆ
ลักษณะเด่นของ Oracle ADF
  • เชื่อมต่อไปยังฐานข้อมูลแสนง่าย
  • เป็น Framework ที่เน้นให้ผู้พัฒนาง่ายๆ (คอนฟิคโหดแท้)
  • มีคอนโทรล UI สวยๆ ใช้งานได้ดี น่าใช้มากมาย
  • ทุกอย่างใช้การ Binding ข้อมูลมาแสดง
  • มีสิ่งที่เรียกว่า pageflow, takflow เพื่อความสบายในการนำกลับมาใช้ใหม่
  • ฟรีสำหรับผู้ที่ซื่อ Oracle Weblogic มาใช้ (ถ้าไม่ให้ใช้มีเฮ)
2014-03-26_215126
Architecture ของ Oracle ADF ดังรูปด้านบน ซึ่งมี 4 เลเยอร์
  • Business Layer ทำหน้าที่ในการจัดหาข้อมูลจากแหล่งข้อมูลหลายๆแหล่งและเรื่องของลอจิกทางธุรกิจ
  • Model layer ทำหน้าที่ในการจัดหาข้อมูลให้อยู่ในรูปแบบใดแบบหนึ่งซึ่งได้มาจาก Business layer แล้วก็จะถูกเตะไป เตะมาระหว่าง Controller และ View Layer
  • Controller Layer ทำหน้าที่ควบคุมการไหลของข้อมูลของแอพลิเคชั่น เหมือนนักบอลที่เลี้ยงลูกไปๆมาๆ นี่ละครับ
  • View Layer ทำหน้าที่ในการนำ Model ที่ถูกส่งมามาแสดงผล
Spring
ตัวนี้ประวัติยาวมากๆ มันเกดิขึ้นมาเพราะว่าคนสร้างไม่ค่อยชอบ Java EE เพราะว่ามันใหญ่เกินความจำเป็นมากๆ ตัวอ้วน ช้า เค้าเลยคิด Framework ของเค้าขึ้นมาเองซะเลยซึ่งเบาสบาย light-weight ซะจริงๆ เขียน Stand-alone แอพลิเคชั่นก็ได้ แถมติดตั้งได้กับแอพลิเคชั่นเวร์ฟเวอร์ เริ่มจากตัวเล็กๆคือ Apache Tomcat ส่วน Java EE ก็ใช้ได้นะครับ เค้าก็ไม่ว่า
คุณลักษณะเด่นของ Spring
  • ใช้หลักการเท่ห์ๆ เรื่องของ Dependency Injection (DI) ในการจัดการเรื่องคลาสเพื่อการปรับเปลี่ยนการทำงานได้อย่างรวดเร็วผนวกเข้า กับ XML และ Annotation
  • ใช้ประโยชน์จากแนวคิด Aspect programming (5+ คำใหม่ๆ ต้องไปศึกษาเองนะครับ)
  • ซัพพอร์ตเรื่องของ declarative ต่างๆ ทำให้โค้ดหดสั้น
  • ยังทำงานร่วมกับมาตรฐานของ Java EE ได้
  • เข้ากันได้กับ Hibernate และ Quartz Framework ตั้งแต่แรกโดยที่ไม่ต้องกำหนดอะไรมากมาย
  • ยืดหยุ่นในการใช้งานกับ Web Framework สำหรับการสร้าง RESTful แอพลิเคชั่นและบริการต่างๆ
  • เขียนไปทดสอบไปง่ายๆด้วย Unit และ Integration
2014-03-26_222058
JBoss SEAM
SEAM การรันตีว่าตัวเองตั้งอยู่บนพื้นฐานของ Java EE, แต่ได้รับการดัดแปลงเรื่องของ API ให้ใช้งานได้ง่ายขึ้น และให้นักพัฒนาเข้าถึง API ได้ง่ายๆผ่าน Annotation แล้วก็ยังมี UI สวยๆมากหน้าที่ให้ใช้งานกัน แถม XML ก็ยังสั้นๆ และสุดท้าย SEAM ตั้งใจจะทำให้การพัฒนาแอพลิเคชั่นเป็นไปตามมาตรฐานและเข้ากับแอพลิเคชั่น เก่าๆได้และแถมเรื่องของ Cloudเข้ามาด้วย
คุณลักษณะเด่นของ JBoss SEAM
  • มี JSF และ EJB มาให้ใช้ด้วย
  • มี AJAX ( Asynchronous JavaScript and XML)
  • ซ่อนการทำงานของกระบวนการทางธุรกิจผ่าน jBPM (เหอๆ ฺBPM ใหม่อีกละ)
  • การควบคุม State จัดการผ่านทาง Declarative
  • ใช้ XML Annotation
  • ทดสอบโค้ดง่ายๆ
2014-03-26_223444

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

ที่มาของเนื้อหา http://www.fusionidea.biz

วันจันทร์ที่ 11 กรกฎาคม พ.ศ. 2559

Object Oriented Programming (OOP)

Object Oriented Programming (OOP)

ภาพจาก http://www.voidspace.org.uk/
Object Oriented Programming เป็นการเขียนโปรแกรมโดยการมองสิ่งต่างๆ เป็นวัตถุ ซึ่งใน Realworld สิ่งต่างๆ รอบๆ ตัวเราก็เป็นวัตถุ โดยมีแนวคิดที่ว่า สิ่งที่ประกอบกันเป็นวัตถุนั้นจะประกอบไปด้วย
  • Attribute(ลักษณะที่สามารถอธิบายได้ว่าวัตถุนี้คืออะไร อย่างเช่น คนสิ่งที่อธิบายได้ว่าเป็นคน อาจจะเป็น มีหู ตา จมูก ปาก แขน ขา อะไรพวกนี้)
  • Method(พฤติกรรมของวัตถุนั้นว่าสามารถทำอะไรได้ พูดง่ายๆ การกระทำนั่นแหละ)
เราสามารถทำการ Implement ได้โดยการทำให้อยู่ในรูปของ Class ซึ่งเปรียบเหมือนกับต้นแบบที่ไว้ สร้าง Object (Class ไม่ใช่ object นะ) คุณสมบัติที่สำคัญของ OOP ก็คือ

  1. Encapsulation
    เป็นการห่อหุ้ม Attribute ไว้ด้วย Method หมายความว่าการที่เราต้องการเข้าไป เปลี่ยนแปลงหรือใช้ค่า Attribute นั้นต้องกระทำผ่าน Method ยกตัวอย่างเช่นเด็กหญิงนิดกับเด็กหญิงหน่อยเป็นเพื่อนกัน มีอยู่วันหนึ่งนิดเดินเหยียบเท้าหน่อย หน่อยรู้สึกไม่พอใจ (ตอนนี้ค่า Attribute อารมณ์ของหน่อยเพิ่มขึ้น) แต่นิดยังไม่รู้ เมื่อหน่อยแสดงสีหน้าไม่พอใจ เมื่อนิดเห็นแบบนั้นนิดรู้สึกผิด(หน่อยก็ยังไม่รู้เพราะ นิดคิดอยู่ในใจ) จึงกล่าวขอโทษ หน่อยได้ยินแบบนั้นจึงหายโกรธ

    ตัวหนา คือ Method
    ตัวหนาเอียง คือ Attribute จะเห็นได้ว่าค่า Attribute นั้นก็คือค่าที่อยู่ภายในการที่จะให้ Object อื่นรับรู้ได้ก็จำเป็นที่จะ ต้องแสดงค่านั้นออกมาผ่านทาง Method สิ่งที่ส่งออกมาให้ Object อื่นรับรู้นั้นเราเรียกว่า Message จากตัวอย่างจะเห็นว่ามีการเปลี่ยนแปลงค่า Atrribute ตอนที่นิดเหยียบเท้าหน่อยนั้น การเหยียบเท้าคือ Method ที่แสดงออกมาทำให้อารมณ์ ซึ่งเป็น Attribute อยู่ภายในเปลี่ยนแปลง และ การกล่าวขอโทษก็เป็น Method ที่ทำการเปลี่ยนแปลงค่า Attribute ดังนั้นภาพของ Object ในหัวก็จะเป็นลักษณะที่ Method ห่อหุ้ม Attribute ไว้ วัตถุทุกตัวจะแสดงออกให้รับรู้ถึงสิ่งที่อยู่ภายในหรือสิ่งที่ต้องการผ่าน ทางการกระทำ
  2. Inheritance
    เป็นการทำให้ Class สามารถสืบทอดต่อกันได้ โดยลักษณะของการสืบทอดนั้นก็เพื่อเพิ่มเติมความสามารถให้สามารถทำงานได้ มากกว่าคลาสแม่ที่สืบทอดมา เช่น คลาสของคนสืบทอดมาจากคลาสของสัตว์เลี้ยงลูกด้วยนม โดยที่ Method พื้นฐานของสัตว์เลี้ยงลูกด้วยนมนั้น สมมุติให้มีเพียง กินอาหาร สืบพันธุ์ ขับถ่าย Class ของคนที่สืบทอดมาจากสัตว์เลี้ยงลูกด้วยนม สิ่งที่คนทำได้แตกต่าง เช่น การพูด ก็จะถูกเพิ่มเข้าไปในคลาสของคน สรุปว่าคนสามารถ กิน,สืบพันธุ์,ขับถ่าย และ พูด ได้
  3. Abstraction
    เป็นการสร้าง Method แบบลอยๆ ขึ้นมายังไม่ได้ระบุรายละเอียดว่า Method นั้น ทำงานอย่างไรจะมีการระบุการทำงานในส่วนของ Subclass ที่รับสืบทอดมา สาเหตุที่มีการทำแบบนี้ก็เพื่อให้สามารถใช้ Polymorphism ได้นั่นเอง
  4. Polymorphism
    คือสภาวะที่ Method มีหลายรูปแบบ​ เป็น​วิธีการกำ​หนดรูปแบบการกระทำ​ที่​เหมือน​กัน​แต่​ได้​ผลที่​แตกต่างกัน สมมุติว่ามี คลาสแม่(Superclass) ที่เป็นคลาสของสัตว์เลี้ยงลูกด้วยนม โดยมีคลาสลูก(Subclass) คือ คลาสของคนกับสุนัข ซึ่งทั้งคนกับสุนัขมี Method ที่ใช้ในการเปล่่งเสียงซึ่งการเปล่งเสียงระหว่างคนกับสุนัขนั้นไม่เหมือนกัน แต่มันก็คือการเปล่งเสียง ดังนั้นเมื่อได้รับ Message ที่บอกให้ทำการเปล่งเสียงทั้งคนและสุนัขก็สามารถเปล่งเสียงได้เพียงแต่มี เสียงที่แตกต่างกันเท่านั้นเอง เพื่อให้สามารถเข้าใจได้ง่ายเราก็จะสร้าง Method ที่ชื่อว่า เปล่งเสียง( ) มาเพียงชื่อเดียวแล้วใช้หลักการ polymorphism นี้เพื่อให้สามารถเปล่งเสียงได้หลายๆ รูปแบบ
การสร้างโครงสร้างการ Design แบบ OO ที่ดีนั้นควรพยายามสร้างตามหลักข้างบนให้ได้นะครับ จะช่วยได้มากเลยทีเดียว แต่ที่แน่ๆ พยายามทำให้คลาสของเรามีลักษณะที่เป็น Encapsulation ตามข้อแรกให้ได้ครับ
นี่ก็เป็นหลักการในการเขียนโปรแกรมแบบ OO ที่ผมสรุปมาจากความเข้าใจของตัวเองนะครับไม่ได้อ้างอิงมาจากที่ไหน ถ้ามีส่วนใดที่ผิดก็แสดงความคิดเห็นมาได้ครับ คราวต่อไปจะมาเล่าเรื่องปัญหาที่เกิดจากการ Design ให้ฟังครับ

วันพฤหัสบดีที่ 16 มิถุนายน พ.ศ. 2559

Cloud Computing คืออะไร?

Cloud Computing คืออะไร?

Cloud Computing คือ บริการที่ครอบคลุมถึงการให้ใช้กำลังประมวลผล หน่วยจัดเก็บข้อมูล และระบบออนไลน์ต่างๆจากผู้ให้บริการ เพื่อลดความยุ่งยากในการติดตั้ง ดูแลระบบ ช่วยประหยัดเวลา และลดต้นทุนในการสร้างระบบคอมพิวเตอร์และเครือข่ายเอง ซึ่งก็มีทั้งแบบบริการฟรีและแบบเก็บเงิน

รู้จักคลาวด์คอมพิวติ้ง  (Cloud Computingแบบเข้าใจง่าย

หากแปลความหมายของคำว่า Cloud Computing ดูจะเข้าใจยาก หรือถ้าแปลเป็นไทย “การประมวลผลบนกลุ่มเมฆ” ก็ยิ่งดูจะงงเข้าไปใหญ่ แต่น่าจะง่ายกว่าถ้าบอกว่า Cloud Computing คือ การที่เราใช้ซอฟต์แวร์, ระบบ, และทรัพยากรของเครื่องคอมพิวเตอร์ของผู้ให้บริการ ผ่านอินเทอร์เน็ต โดยสามารถเลือกกำลังการประมวลผล เลือกจำนวนทรัพยากร ได้ตามความต้องการในการใช้งาน และให้เราสามารถเข้าถึงข้อมูลบน Cloudจากที่ไหนก็ได้ ดังแผนภาพด้านล่างนี้นั่นเอง
cloud-computing-what-is-cloud-01
จาก ภาพด้านบนนี้ จะเห็นว่าด้านในของกรอบที่เป็นก้อนเมฆก็คือทรัพยากรของผู้ให้บริการที่มี ทั้ง Hardware และ Software (ซึ่งก็ทำงานบน Hardware ของผู้ให้บริการเช่นกัน) ผู้ใช้บริการเพียงแค่ต่อเชื่อมเข้าไปใช้ผ่าน Network ด้วยเว็บบราวเซอร์ หรือ Client แอพพลิเคชั่น บนอุปกรณ์ต่างๆของตน เช่น มือถือ, Tablet, Notebook, หรือ Chromebook เป็นต้น

ทำไมบริการ คลาวด์คอมพิวติ้ง (Cloud Computingจึงได้รับความนิยม?

Cloud Computing คือ บริการที่เราใช้หรือเช่าใช้ระบบคอมพิวเตอร์หรือทรัพยากรด้านคอมพิวเตอร์ ของผู้ให้บริการ เพื่อนำมาใช้ในการทำงาน โดยที่เราไม่จำเป็นต้องลงทุนซื้อ Hardware และ Software เองทั้งระบบ ไม่ต้องวางระบบเครือข่ายเอง ลดความรับผิดชอบในการดูแลระบบลง (เพราะผู้ให้บริการจะเป็นผู้ดูแลให้เอง) แถมตอนอัพเกรดระบบยังทำได้ง่ายกว่า ผู้ใช้ทุกคนสามารถเข้าถึงระบบ ข้อมูลต่างๆ ผ่านอินเทอร์เน็ต สามารถจัดการ บริหารทรัพยากรของระบบ ผ่านเครือข่าย และมีการแบ่งใช้ทรัพยากรร่วมกัน (shared services) ได้ด้วย และการจ่ายเงินเพื่อเช่าระบบ ก็สามารถจ่ายตามความต้องการของเรา ใช้เท่าไหร่ จ่ายเท่านั้นได้ หากวันใดความต้องการมีมากขึ้นก็สามารถซื้อเพิ่มเติมเพื่อเพิ่มศักยภาพของ ระบบ Cloud Computing ได้ โดยที่ไม่ต้องอัพเกรดระบบ และเครื่องคอมพิวเตอร์ให้วุ่นวาย ดังนั้น ธุรกิจขนาดเล็ก และขนาดกลาง รวมไปถึงสถาบันการศึกษา จึงหันมาใช้บริการ Cloud Computing ที่ทั้งช่วยลดต้นทุนและลดความยุ่งยากทั้งหลายกันมาก คล้ายกับเป็นการ Outsource งานนี้ออกไปเพื่อจะได้ Focus กับงานหลักของตนเองจริงๆ

ประเภทของบริการ คลาวด์คอมพิวติ้ง  (Cloud Service Models)

บริการ Cloud Computing มีหลากหลายรูปแบบ แต่ในที่นี้ เราขอพูดถึงรูปแบบหลักๆ 3 แบบได้แก่

Software as a Service (SaaS)

เป็น การที่ใช้หรือเช่าใช้บริการซอฟต์แวร์หรือแอพพลิเคชั่น ผ่านอินเทอร์เน็ต โดยประมวลผลบนระบบของผู้ให้บริการ ทำให้ไม่ต้องลงทุนในการสร้างระบบคอมพิวเตอร์ ฮาร์ดแวร์ ซอฟต์แวร์เอง ไม่ต้องพะวงเรื่องค่าใช้จ่ายในการดูแลระบบ เพราะซอฟต์แวร์จะถูกเรียกใช้งานผ่าน Cloud จากที่ไหนก็ได้
ซึ่งบริการ Software as a Service ที่ ใกล้ตัวเรามากทื่สุดก็คือ GMail นั่นเอง นอกจากนั้นก็เช่น Google Docs หรือ Google Apps ที่เป็นรูปแบบของการใช้งานซอฟต์แวร์ผ่านเว็บบราวเซอร์ สามารถใช้งานเอกสาร คำนวณ และสร้าง Presentation โดยไม่ต้องติดตั้งซอฟต์แวร์บนเครื่องเลย แถมใช้งานบนเครื่องไหนก็ได้ ที่ไหนก็ได้ แชร์งานร่วมกันกับผู้อื่นก็สะดวก ซึ่งการประมวลผลจะทำบน Server ของ Google ทำให้เราไม่ต้องการเครื่องที่มีกำลังประมวลผลสูงหรือพื้นที่เก็บข้อมูลมากๆ ในการทำงาน Chromebook ราคาประหยัดซักเครื่องก็ทำงานได้แล้ว มหาวิทยาลัยทั้งในไทยและต่างประเทศหลายแห่งในปัจจุบัน ก็ยกเลิกการตั้ง Mail Server สำหรับใช้งาน e-mail ของบุคลากร และนักศึกษาในมหาวิทยลัยกันเองแล้ว แต่หันมาใช้บริการอย่าง Google Apps แทน เป็นการลดต้นทุน, ภาระในการดูแล, และความยุ่งยากไปได้มาก

Platform as a Service (PaaS)

สำหรับ การพัฒนาแอพพลิเคชั่นนั้น หากเราต้องการพัฒนาเวบแอพพลิเคชั่นที่ค่อนข้างซับซ้อน ซึ่งรันบนเซิร์ฟเวอร์ หรือ Mobile application ที่มีการประมวลผลทำงานอยู่บนเซิร์ฟเวอร์ เราก็ต้องตั้งเซิร์ฟเวอร์ เชื่อมต่อระบบเครือข่าย และสร้างสภาพแวดล้อม เพื่อทดสอบและรันซอฟต์แวร์และแอพพลิเคชั่น เช่น ติดตั้งระบบฐานข้อมูล, Web server, Runtime, Software Library, Frameworks ต่างๆ เป็นต้น จากนั้นก็อาจยังต้องเขียนโค้ดอีกจำนวนมาก
แต่ถ้าเราใช้บริการ PaaS  ผู้ ให้บริการจะเตรียมพื้นฐานต่างๆ เหล่านี้ไว้ให้เราต่อยอดได้เลย  พื้นฐานทั้ง Hardware, Software, และชุดคำสั่ง ที่ผู้ให้บริการเตรียมไว้ให้เราต่อยอดนี้เรียกว่า Platform ซึ่งก็จะทำให้ลดต้นทุนและเวลาที่ใช้ในการพัฒนาซอฟท์แวร์อย่างมาก ตัวอย่าง เช่น Google App Engine, Microsoft Azure ที่หลายๆบริษัทนำมาใช้เพื่อลดต้นทุนและเป็นตัวช่วยในการทำงาน
Application ดังๆหลายตัวเช่น Snapchat ก็เลือกเช่าใช้บริการ PaaS อย่าง Google App Engine ทำให้สามารถพัฒนาแอพที่ให้บริการคนจำนวนมหาศาลได้ โดยใช้เวลาพัฒนาไม่นานด้วยทีมงานแค่ไม่กี่คน

Infrastructure as a Service (IaaS)

เป็น บริการให้ใช้โครงสร้างพื้นฐานทางคอมพิวเตอร์อย่าง หน่วยประมวลผล ระบบจัดเก็บข้อมูล ระบบเครือข่าย ในรูปแบบระบบเสมือน (Virtualization) ข้อดีคือองค์กรไม่ต้องลงทุนสิ่งเหล่านี้เอง, ยืดหยุ่นในการปรับเปลี่ยนโครงสร้างระบบไอทีขององค์กรในทุกรูปแบบ, สามารถขยายได้ง่าย ขยายได้ทีละนิดตามความเติบโตขององค์กรก็ได้ และที่สำคัญ ลดความยุ่งยากในการดูแล เพราะหน้าที่ในการดูแล จะอยู่ที่ผู้ให้บริการ
ตัวอย่าง เช่น บริการ Cloud storage อย่าง DropBox ซึ่งให้บริการพื้นที่เก็บข้อมูลนั่นเอง แต่นอกจากนี้ก็ยังมีบริการให้เช่ากำลังประมวลผล, บริการให้เช่า เซิร์ฟเวอร์เสมือน เพื่อใช้ลงและรันแอพพลิเคชั่นใดๆตามที่เราต้องการไม่ว่าจะเป็น Web Application หรือ Software เฉพาะด้านขององค์กร เป็นต้น
ตัวอย่างบริการอื่นๆในกลุ่มนี้ก็เช่น Google Compute Engine, Amazon Web Services, Microsoft Azure
cloud-computing-what-is-cloud-02
Cloud Service Models

ความสำเร็จขององค์กรที่ใช้งาน Cloud Computing

Thai Smile บริษัทสายการบินน้องใหม่ที่นำเอาคลาวด์คอมพิวติ้ง (Cloud Computing) เข้ามาช่วยในการลดต้นทุน และช่วยย่นระยะเวลาในการสร้างระบบคอมพิวเตอร์ โดยทางไทยสไมล์ มองว่า บริษัทน้องใหม่ แยกตัวออกมาจากการบินไทย กว่าจะตั้งตัวได้ กว่าจะมีระบบที่สมบูรณ์ ก็ต้องใช้เวลาหลายเดือน แต่ความได้เปรียบในเชิงธุรกิจ ต้องการการตัดสินใจที่รวดเร็ว ดังนั้น คลาวด์คอมพิวติ้ง  (Cloud Computing) จึงเป็นทางเลือกในการช่วยประหยัดเวลา ลดความยุ่งยากและเสียเวลากับการลงทุนอุปกรณ์เอง และสำหรับไทยสไมล์แล้ว Cloud Computing คือคำตอบที่ทำให้สามารถขยับตัวเพื่อแข่งขันในตลาดได้อย่างทันท่วงที
จาก ตัวอย่าง จะเห็นได้ว่า องค์กร บริษัท ธุรกิจขนาดเล็ก ขนาดกลาง และขนาดใหญ่ ล้วนแต่หาช่องทางในการลดต้นทุน ลดเวลา ลดความยุ่งยากในบริหารจัดการด้านไอที ซึ่งสำคัญมาก และเกี่ยวข้องกับความได้เปรียบในการแข่งขันทางธุรกิจ เพราะการซื้ออุปกรณ์ ฮาร์ดแวร์ ซอฟต์แวร์ การอัพเดตซอฟต์แวร์ และการอัพเกรดระบบ ต่างมาพร้อมกับต้นทุนและต้องการการบำรุงรักษาในระยะยาว ในขณะที่องค์กรเอง ก็ต้องการความยืดหยุ่น และไม่ยุ่งยากในการปรับเปลี่ยนโครงสร้างระบบคอมพิวเตอร์, ระบบเครือข่าย รองรับการขยายตัวของธุรกิจ และปรับตัวเข้ากับอนาคตได้เร็วกว่าคู่แข่ง
ในยุคที่มีอินเทอร์แพร่หลายและมีเครือข่าย 3G / 4G / Wi-Fi ที่ครอบคลุมทุกพื้นที่ การวางใจให้ Cloud ทำหน้าที่คำนวณ ประมวลผล จัดเก็บข้อมูล ก็ทำให้การใช้งานคอมพิวเตอร์หรืออุปกรณ์ผ่าน Cloud ก็ไม่ต้องจำเป็นต้องลงทุนสูงอีกต่อไป

ที่มา : กลุ่มภาระงานเทคโนโลยีสารสนเทศ คณะวิทยาศาสตร์ มหาวิทยาลัยขอนแก่น

วันพุธที่ 23 มีนาคม พ.ศ. 2559

Design Patterns(แพตเทิร์น ) คืออะไร

Design Patterns(แพตเทิร์น ) คืออะไร

ดีไซน์แพตเทิร์น (อังกฤษ: Design Patterns) คือแบบแผนหรือแนวทางที่ใช้ในการแก้ไขปัญหาที่เกิดขึ้นเสมอๆ ในการออกแบบคอมพิวเตอร์ซอฟต์แวร์ แบบแผนและแนวทางเหล่านี้ไม่ใช่รูปแบบตายตัวที่จะถูกนำไปใช้โดยตรง แต่เป็นการอธิบายแนวทางหรือโครงที่จะถูกนำไปประยุกต์ใช้ในสถานการณ์ต่างๆ กล่าวเฉพาะในทางการเขียนโปรแกรมเชิงวัตถุ ดีไซน์แพตเทิร์นจะแสดงความสัมพันธ์ต่อกันระหว่างคลาสหรืออ็อบเจกต์ต่างๆ โดยไม่จำเพาะเจาะจงการนำไปใช้งานในขั้นสุดท้าย ขั้นตอนวิธีไม่จัดเป็นดีไซน์แพตเทิร์นเพราะเป็นการแก้ปัญหาในทางการประมวลผลมากกว่าในทางการออกแบบ
การจัดหมวดหมู่และแพตเทิร์นในหนังสือ Design Patterns

ดีไซน์แพตเทิร์นมีจุดเริ่มต้นจากหนังสือชื่อ A Pattern Language: Towns, Buildings, Construction แต่งโดยสถาปนิกชื่อ Christopher Alexander เมื่อปี ค.ศ. 1977 จากนั้น Kent Beck และ Ward Cunningham ริเริ่มนำเอาแนวคิดนี้มาทดลองใช้กับการเขียนโปรแกรมในปี ค.ศ. 1987 และได้นำเสนอผลงานในงานประชุม OOPSLA ในปีเดียวกันนั้น

ประโยชน์
ดีไซน์แพตเทิร์นช่วยทำให้กระบวนการพัฒนาโปรแกรมรวดเร็วขึ้นเพราะเป็นตัวอย่างที่ผ่านการพิสูจน์ทดสอบมาแล้ว การออกแบบซอฟต์แวร์ที่ดีต้องเตรียมการสำหรับปัญหาที่อาจจะไม่พบจนกว่าจะเริ่มนำไปใช้งาน การใช้ดีไซน์แพตเทิร์นช่วยป้องกันปัญหาเล็กน้อยที่อาจจะลุกลามใหญ่โต ทั้งยังทำให้การทำความเข้าใจโค้ดง่ายขึ้นในหมู่ผู้ร่วมงานในทีมที่คุ้นเคยกับดีไซน์แพตเทิร์น

การจัดหมวดหมู่และแพตเทิร์นในหนังสือ Design Patterns
การจัดหมวดหมู่ดีไซน์แพตเทิร์นตามหนังสือ Design Patterns แบ่งตามวัตถุประสงค์การใช้งาน ดังนี้

แพตเทิร์นการสร้างอ็อบเจกต์ (creational patterns)
Abstract Factory
Builder
Factory Method
Prototype
Singleton
แพตเทิร์นโครงสร้าง (structural patterns)
Adapter
Bridge
Composite
Decorator
Façade
Flyweight
Proxy
แพตเทิร์นพฤติกรรม (behavioral patterns)
Chain of responsibility
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template method

Visitor

Struts คืออะไร


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-Controller คืออะไร?

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



ก่อนที่เราจะใช้ Strut Framework นั้นเรามาติดตั้งส่วนต่างๆที่จำเป็นจะต้องใช้ก่อน

1.ติดตั้ง JDK1.4 หรือเวอร์ชั่นสูงกว่า สามารถ download ได้จาก sun
2. ติดตั้ง IDE เพื่อช่วยในการเขียนเช่น
Eclipse , Netbeans , JDev หรืออะไรก็แล้วแต่ เพียงแต่ที่ยกตัวอย่างมานั้น Netbean และ JDev นั้น support Struts ด้วยกันทั้งนั้นแต่ Eclipse ไม่ได้ support Struts จึงต้อหา plugin มาช่วยใช้ในการพัฒนา เช่น Myeclipse ที่รวม plugin สำคัญๆไว้หมดแล้วก็ได้ อันนี้แล้วแต่ครับขึ้นอยุ่กับความถนัดใน IDE ของแต่ละคน ขั้นตอนการใช้งานก้ต่างกันนิดหน่อยครับ แต่ที่ผมใช้คือ Eclipse+Exadel เพราะว่า plugin Exadel ภายในจะประกอบด้วย tomcat, struts framework ซึ่งเราไม่ต้องลง tomcat และ struts เลยมันมีให้เบ็ดเสร็จ เพียงแค่ install plugin Exadel ก็ใช้งานได้เรียบร้อย ซึ่งถ้าคุณไม่ใช้ plugin Exadel ก็ต้องติดตั้ง Tomcat และ Struts

- ติดตั้ง
Tomcat สามารถ download ได้จาก ที่นี่ ซึ่งมีหลาย version ให้ใช้งานและในแต่ละเวอร์ชั่นก็มีหลายแบบให้ download ผมแนะนำให้ download แบบ .zipเมื่อ download มาแล้วก้ขยาย zip ไว้ก็เรียบร้อย เราใช้ tomcat เพื่อทำหน้าที่เป็น http server และ servlet containerในส่วนนี้เราสามารถใช้ application server ตัวอื่นๆก็ได้เช่น oc4j, glassfish, jboss, oracle application server ฯลฯ ในตัวอย่างนี้ผมขอใช้ tomcat เพราะไม่กิน resource มากแล้วก็ฟรีครับ ^^

- ติดตั้ง Struts Application download ได้จาก
ที่นี่ ในปัจจุบัน Struts ออกเวอร์ชั่น 2 แล้วแต่ที่ผมใช้อยู่เป็น Struts 1.3.8เมื่อ download มาแล้วให้แตกไฟล์ออกมาจะได้ folder struts-1.3.8 ให้เข้าไป struts-1.3.8\apps จะเห็น war ไฟล์

- struts-black-1.3.8.war เป็น struts application เปล่าๆที่ใช้ในการสร้าง struts application ซึ่งเราจะใช้ไฟล์นี้ในการสร้าง web application ของเรา

- struts-documentation.war จะเป็นที่เก็บ api และ documents สำคัญต่างๆที่เกี่ยวกับการพัฒนา Struts application

- struts-example.war เป็นตัวอย่าง MailReader application เอาไว้ให้เราลองศึกษาดู จากนั้นให้เรา copy war file พวกนี้ไปที่ \webapps

เมื่อทุกอย่างพร้อมแล้ว มาเริ่มพัฒนา Struts Application กัน ในตอนต่อไป
 

เว็บเซอร์วิส (Web Service)

เว็บเซอร์วิส (Web Service)

ความหมายของเว็บเซอร์วิส

                เว็บเซอร์วิส (Web service) คือ ระบบซอฟต์แวร์ที่ออกแบบมา เพื่อสนับสนุนการแลกเปลี่ยนข้อมูลกัน ระหว่างเครื่องคอมพิวเตอร์ผ่านระบบเครือข่าย โดยที่ภาษาที่ใช้ในการติดต่อสื่อสารระหว่างเครื่องคอมพิวเตอร์ คือเอกซ์เอ็มแอล เว็บเซอร์วิสมีอินเทอร์เฟส ที่ใช้อธิบายรูปแบบข้อมูลที่เครื่องคอมพิวเตอร์ประมวลผลได้ เช่น WSDL ระบบ คอมพิวเตอร์ใช้งานสื่อสารโต้ตอบกับเว็บเซอร์วิสตามรูปแบบที่ได้กำหนดไว้แล้ว โดยการส่งสาสน์ตามอินเตอร์เฟสของเว็บเซอร์วิสนั้น โดยที่สาสน์ดังกล่าวอาจแนบไว้ในซอง SOAP หรือส่งตามอินเตอร์เฟสในแนวทางของ REST สาสน์เหล่านี้ปกติแล้วถูกส่งโดยอาศัย HTTP และใช้ XML ร่วม กับมาตรฐานเกี่ยวกับเว็บอื่นๆ โปรแกรมประยุกต์ที่เขียนโดยภาษาต่างๆ และทำงานบนแพลตฟอร์มต่างๆกันสามารถใช้เว็บเซอร์วิสเพื่อแลกเปลี่ยนข้อมูล ผ่านทางเครือข่ายคอมพิวเตอร์ เช่น อินเทอร์เน็ต ในลักษณะเดียวกับการสื่อสารระหว่างโปรเซส (Inter-process communication) บน เครื่องเดียวกัน ความสามารถในการแลกเปลี่ยนข้อมูลระหว่างระบบที่ต่างกันนี้ (เช่น การแลกเปลี่ยนข้อมูลระหว่าง โปรแกรมที่เขียนโดยภาษาจาวา และโปรแกรมที่เขียนโดยภาษาไพทอน หรือการแลกเปลี่ยนข้อมูลระหว่างโปรแกรมประยุกต์ที่ทำงานบนไมโครซอฟท์ วินโดวส์และโปรแกรมประยุกต์ที่ทำงานบนลินุกซ์) เกิดขึ้นได้เนื่องจากการใช้มาตรฐานเปิด โดย OASIS และ W3C เป็นคณะกรรมการหลักในการรับผิดชอบมาตรฐานและสถาปัตยกรรมของเว็บเซอร์วิส

                ความหมายของเซอร์วิส (Service) หรือบริการในแง่ของเทคโนโลยี เราลองมาพิจารณาความหมายของบริการหรือกระบวนการ (Process) ที่ องค์กรต่างๆ ทั้งภาครัฐและเอกชนต่างให้บริการกับประชาชน ลูกค้า พนักงาน หรือคู่ค้า ตัวอย่างเช่นบริการที่พนักงานหน้าเคาท์เตอร์ของธนาคารสามารถให้บริการแก่ ลูกค้าอาจมีหลากหลายอาทิเช่น บริการฝาก/ถอนเงิน บริการแลกเปลี่ยนเงินตราต่างประเทศ หรือบริการด้านสินเชื่อเป็นต้น บริการแต่ละบริการอาจจะมีกระบวนการในการทำงานที่ซับซ้อนแตกต่างกัน แต่ในมุมมองของลูกค้าจะไม่สนใจว่าบริการนั้นมีขั้นตอนการทำงานอย่างไร แต่จะมีวัตถุประสงค์หลักเพื่อให้บริการนั้นเสร็จสิ้นและได้ผลลัพธ์ออกมาตาม ที่ลูกค้าขอใช้บริการนั้นๆ

                ความหมายของเซอร์วิสในแง่ของซอฟต์แวร์ ก็มีคุณลักษณะเช่นเดียวกับบริการทั่วๆ ไป กล่าวคือเป็นซอฟต์แวร์คอมโพเนนท์ (Software Component) ที่ อาจเป็น ฟังก์ชัน หรือ โมดูล ที่มีกระบวนการการทำงานภายใน สามารถรับอินพุตเข้ามาเพื่อประมวลผล และจะส่งผลลัพธ์กลับออกไป ซอฟต์แวร์เซอร์วิสเหล่านี้เราอาจกำหนดเป็นกระบวนการทางธุรกิจ (Business Process) กล่าวคือจะเป็นฟังก์ชันที่ทำเฉพาะการประมวลผลซึ่งจะไม่เกี่ยวข้องกับส่วนแสดงผล (Presentation Logic) นอกจากนี้ด้วยเทคโนโลยี Distributed Computing ทำให้สามารถที่จะพัฒนาซอฟต์แวร์เซอร์วิสเพื่อเรียกใช้จากระยะไกล (remote) ผ่าน Internet ได้โดยใช้เทคโนโลยีเฉพาะด้าน (proprietary technology) อาทิเช่น RMI, CORBA หรือ DCOM

                เว็บเซอร์วิส (Web Service) อาจ ไม่ได้เป็นเรื่องใหม่แล้ว และคนวงการไอทีส่วนใหญ่เริ่มเข้าใจเทคโนโลยีเว็บเซอร์วิสดีขึ้น มาตรฐานต่างๆ ของเว็บเซอร์วิสเริ่มเป็นที่ยอมรับกันมากขึ้นและกลายเป็นมาตรฐานหลักในการ พัฒนา SOA แต่การพัฒนาเว็บเซอร์วิสสำหรับประยุกต์ ใช้งานจริงในองค์กรยังเพิ่งเริ่มต้นและวัตถุประสงค์ในการพัฒนายังไม่ชัดเจน นัก แต่เมื่อมีการกล่าวถึงการพัฒนาสถาปัตยกรรมเชิงบริการ (SOA) ภายในองค์กรกันมากขึ้น โดยเฉพาะความต้องการขององค์กรที่จะทำการเชื่อมโยงระบบภายในองค์กร (Internal Enterprise Application Integration) จึงทำให้องค์กรสนใจจะนเทคโนโลยีเว็บเซอร์วิสเข้ามาช่วยในการพัฒนาโปรแกรมต่างๆ มากขึ้น      บทความนี้จะเป็นการแนะนำเทคโนโลยีเว็บเซอร์วิส ประโยชน์ และมาตรฐานต่างๆ ของเว็บเซอร์วิส การพัฒนาเว็บเซอร์วิสโดยใช้เทคโนโลยีจาวา (Java Technology)

ตัวอย่างการใช้งานของซอฟต์แวร์เซอร์วิสโดยใช้ Distributed Computing จะเป็นไปดังแสดงในรูปที่ 1 ซึ่งจะเห็นได้ว่ามีระบบ Back-end ต่างๆ เช่น Airline Reservation System และ Hotel Reservation System ที่มีซอฟต์แวร์เซอร์วิสต่างๆ อยู่ ผู้ใช้ด้าน Front-end ที่จะเป็นผู้ใช้บริการเซอร์วิส (Service Requestor) ซึ่งอาจเรียกใช้จากอุปกรณ์ต่างๆ เช่น คอมพิวเตอร์ หรือโทรศัพท์เคลื่อนที่ (Mobile Phone) จะสามารถเรียกใช้ซอฟต์แวร์เซอร์วิสเหล่านี้ผ่านผู้ให้บริการเซอร์วิส (Services Provider) ซึ่งทำหน้าที่เป็น Middleware การเรียกใช้เซอร์วิสเหล่านี้อาจเป็นการเรียกใช้จากผู้ใช้โดยตรงหรือเรียกใช้โดยโปรแกรมซอฟต์แวร์คอมโพเนนท์ (Program to Program) จากอุปกรณ์ที่ใช้ นอกจากนี้ในกรณีที่ไม่ทราบชื่อหรือเซอร์วิสที่มีอยู่ เราสามารถที่จะค้นหาซอฟต์แวร์เซอร์วิสเหล่านี้ได้จาก Registry ที่ ทำหน้าที่เก็บรายละเอียดของซอฟต์แวร์เซอร์วิสต่างๆที่มีอยู่ โดยผู้ให้บริการเซอร์วิสจะทำหน้าที่ลงทะเบียนรายละเอียดของเซอร์วิสไว้ ทั้งนี้การค้นหาเซอร์วิสผ่าน Registry สามารถทำได้อัตโนมัติโดยใช้คำสั่งในโปรแกรมด้านผู้ใช้บริการเซอร์วิส
                          รูปที่ 1 ซอฟต์แวร์เซอร์วิสโดยใช้ Distributed Computing


เว็บเซอร์วิสจะใช้หลักการของซอฟต์แวร์เซอร์วิสของ Distributed Computing แต่จะใช้โพรโทคอลที่มีมาตรฐานกลาง (Standard Protocol) ที่อยู่ในรูปแบบ XML (eXtensible Markup Language) และจะเป็นซอฟต์แวร์คอมโพเนนท์ที่ให้บริการผ่านอินเตอร์เน็ต

Gartner Research ได้ให้คำนิยามของเว็บเซอร์วิสไว้ดังนี้ เว็บเซอร์วิสคือ ซอฟต์แวร์คอมโพเนนท์แบบ loosely coupled ที่ส่งบริการผ่านเทคโนโลยีอินเตอร์เน็ตที่มีมาตรฐาน 

พื้นฐานของ Web Service

พื้นฐานของ Web Service คือ XML และส่วนใหญ่จะใช้ HTTP แต่อาจจจะใช้อินเทอร์เน็ตโพรโทคอลอื่นอย่างเช่น SMTP หรือ FTP ก็ได้ แต่จะพบว่า HTTP ก็เป็นที่รู้จักกันดี และไปได้ทั่วทุกแห่งที่มี internet ส่วน XML คือภาษาสากลที่คุณสามารถปรับแต่งได้ตามใจชอบ เพื่อให้เกิดกิจกรรมระว่าง client และบริการ หรือระหว่างส่วนประกอบต่างๆ เบื้องหลัง Web server ก็คือ ข้อความ XML จะถูกแปลงให้การขอบริการจาก Middle ware และผลที่ได้ก็จะแปลงกลับมาในรูป XML

ยกตัวอย่างให้เห็นง่ายๆ คุณต้องการให้เครื่อง PC อ่านค่าจาก serial port แล้วส่งไปประมวลผลบนเครื่อง UNIX แล้วส่งผลกลับมาแสดงบนจอ PC ถ้าเป็นเมื่อก่อน คุณก็คงต้องแปลงข้อมูลที่ได้ให้อยู่ในรูปของ ASCII แล้วส่งไปยัง UNIX พร้อมคำสั่งว่าให้ทำอะไร ในฝั่ง UNIX คุณก็ต้องมาแยกว่าอันไหนคือคำสั่ง อันไหนคือข้อมูล เมื่อประมวลผลแล้ว จะส่งกลับมาในรูปแบบไหน แล้วถ้าหากจะส่งไปหาเครื่องที่เป็น MAC ท่านจะต้องเขียนโปรแกรมเพิ่มในส่วนไหนบ้าง จะพบว่าเราต้องพัฒนากันเป็นคู่ๆ ไป และต้องนิยามในแต่ละฝั่งให้ชัดเจน แต่หากเป็น Web Service คุณจะพบว่า เราแปลงข้อมูลให้อยู่ในรูป XML แต่ละคุณก็ต้องการรู้แค่ มาตรฐาน XML ก็พอ แล้วต่างคนต่างก็เขียน Service ของตัวเอง ไม่ต้องกังวลเรื่องของการเชื่อมโยงอีกต่อไป และ Protocol ที่ส่งก็คือ HTTP นั่นเอง ถ้าท่านเชื่อมโยงกับ HTTP (หรือเว็บ) ได้ ท่านก็ใช้บริการทุกอย่างได้

คุณลักษณะพื้นฐานของเว็บเซอร์วิสมีดังนี้

·         เว็บเซอร์วิสเป็นซอฟต์แวร์คอมโพเนนท์ที่ระบุตำแหน่งโดยใช้ URI

·         อินเตอร์เฟสและการติดตั้งของเซอร์วิสจะนิยาม อธิบาย และค้นหาโดยใช้ ภาษาXML

·         เว็บเซอร์วิสสนับสนุนการเรียกใช้จากซอฟต์แวร์ประยุกต์อื่นๆ ผ่านโพรโทคอลอินเตอร์เน็ต

·         เว็บเซอร์วิสใช้เอกสารแบบ XML ในการส่งข้อมูลระหว่างผู้ให้บริการและผู้ใช้

·         เว็บเซอร์วิสช่วยในการเชื่อมโยงโปรแกรมประยุกต์ต่างแพลตฟอร์ม (Cross-platform Integration) ผ่านอินเตอร์เน็ต

·         นักพัฒนาสามารถพัฒนาเว็บเซอร์วิสได้โดยใช้โปรแกรมภาษาคอมพิวเตอร์ต่างๆเช่น Java, C, C# หรือ Visual Basic และสามารถพัฒนาโดยการเปลงซอฟต์แวร์คอมโพเนนท์ที่มีอยู่ให้เป็นเว็บเซอร์วิส

·         เว็บเซอร์วิสจะไม่รวมถึงการจัดการส่วนแสดงผลเหมือน HTML

·         เว็บเซอร์วิสจะเป็นซอฟต์แวร์คอมโพเนนท์แบบ loosely couple ดังนั้นแต่ละคอมโพเนนท์จะเป็นอิสระและมีฟังก์ชันที่สมบูรณ์ในตัว

·         เราสามารถที่จะค้นหาและเรียกใช้เว็บเซอร์วิสจาก registry ที่เป็นแบบ public หรือ private โดยใช้มาตรฐานกลางเช่น UDDI และ ebXML

·         เว็บเซอร์วิสสามารถที่จะเรียกใช้โดย client ต่างๆ ได้เช่น คอมพิวเตอร์ โทรศัพท์เคลื่อนที่ หรือ พีดีเอ

เหตุผลของการพัฒนาเว็บเซอร์วิส

                เว็บเซอร์วิสจะแตกต่างกับโปรแกรมประยุกต์บนเว็บ (Web Application) และDistributed Computing (Distributed Application) ทั้งนี้เพราะโปรแกรมประยุกต์บนเว็บ จะเป็นโปรแกรมเพื่อให้ผู้ใช้ (End User) สามารถโต้ตอบกับโปรแกรมผ่านเว็บไซต์ได้ ไม่ใช่ Distributed Computing ที่เป็นซอฟต์แวร์เซอร์วิสและไม่สามารถเรียกใช้จากผู้ใช้ที่หลากหลายได้ ส่วนข้อจำกัดของ Distributed Computing คือจะยึดติดกับโพรโทคอลเฉพาะเช่น RMI หรือ CORBA และโพรโทคอลเหล่านี้เป็นแบบไบนารี่ (Binary Protocol) จึง ผูกอยู่กับเทคโนโลยีใดเทคโนโลยีหนึ่ง ดังนั้นจะเห็นได้ว่าเว็บเซอร์วิสไม่ใช่แนวคิดใหม่ เพียงแต่เปลี่ยนรูปแบบโพรโทคอลและหลักการบางอย่างที่เคยใช้ใน Distributed Computing เหตุผลสำคัญที่ควรเลือกพัฒนาเว็บเซอร์วิสมากกว่าการพัฒนาโปรแกรมประยุกต์บนเว็บและ Distributed Computing คือ

1.เว็บเซอร์วิสใช้โพรโทคอลที่เป็นมาตรฐานโดยใช้รูปแบบ XML

2.เราสามารถเรียกใช้เว็บเซอร์วิสโดย XML-based RPC จึงทำให้สามารถเรียกผ่าน Firewall ซึ่งแตกต่างกับกรณีของเทคโนโลยีแบบกระจาย

3.เว็บเซอร์วิสสนับสนุนการทำงานร่วมกันของโซลูชัน ที่ข้ามแพลตฟอร์มและใช้ภาษาคอมพิวเตอร์ที่ต่างกันได้ โดยการส่งข้อมูลแบบ XML

4.เว็บเซอร์ วิสสนับสนุนการการเรียกใช้จากซอฟต์แวร์ประยุกต์อื่นๆ ผ่านโพรโทคอลอินเตอร์เน็ต ซึ่งแตกต่างกับโปรแกรมประยุกต์บนเว็บที่เป็นการเรียกโดยตรงจากผู้ใช้

จุดเด่นของการพัฒนาเว็บเซอร์วิสสามารถที่จะสรุปได้ดังนี้


·         การเชื่อมโยง (Interoperable): สนับสนุนการเชื่อมโยงกันระหว่างโปรแกรมประยุกต์ที่หลากหลาย (Heterogeneous Applications) ได้ โดยใช้มาตรฐานเว็บที่เป็นกลาง

·         ลดค่าใช้จ่าย (Economical): สนับสนุนการนำซอฟต์แวร์คอมโพเน้นท์กลับมาใช้ใหม่ (reuse) และไม่ต้องยึดติดกับเทคโนโลยีเดิม

·         อัตโนมัติ (Automatic): สนับสนุนการการเรียกใช้จากโปรแกรมโดยตรง โดยไม่ต้องโต้ตอบกับผู้ใช้

·         เข้าถึงได้ (Accessible): สามารถที่จะเรียกใช้โปรแกรมเดิม (Legacy) หรือโปรแกรมภายในผ่านเว็บได้

·         ใช้ได้ตลอด (Available): สนับสนุนการเรียกใช้ได้ทุกที่ ทุกอุปกรณ์ และทุกเวลา

·         ขยายได้ (Scalable): ไม่ได้จำกัดขนาดของโปรแกรมหรือจำนวนของระบบต่างๆ

โมเดลการทำงานของเว็บเซอร์วิส

                กระบวนการการทำงานของเว็บเซอร์วิสจะมีขั้นตอนการทำงานเช่นเดียวกับซอฟต์แวร์เซอร์วิสที่ใช้ Distributed Computing ดังอธิบายในรูปที่ 1 ซึ่งเราสามารถที่จะแบ่งบทบาทองค์ประกอบของเว็บเซอร์วิสได้เป็นสามส่วน โดยทั้งสามองค์ประกอบมีความสัมพันธ์ดังแสดงในรูปที่ 2 และสามารถอธิบายได้ดังนี้

·         ผู้ให้บริการ (Service Provider): ผู้ให้บริการจะมีหน้าที่ในการพัฒนาและติดตั้งเว็บเซอร์วิส และเป็นผู้ที่นิยามความหมายของเซอร์วิสและลงทะเบียนเซอร์วิสกับ Service Registry

·         ผู้ใช้บริการ (Service Requestor): ผู้ ใช้บริการจะเป็นผู้เรียกใช้เว็บเซอร์วิส โดยอาจทำการค้นหาเซอร์วิสจากเซอร์วิสไดเร็กทอรี่ แล้วทำการเรียกใช้เซอร์วิสจากผู้ให้บริการ

·         Service Registry: หรืออาจเรียกว่า Service Broker มีหน้าที่ในการรับลงทะเบียนและช่วยในการค้นหาเว็บเซอร์วิส Service Registry จะ เก็บรายละเอียดของเว็บเซอร์วิสต่างๆเช่น นิยาม และตำแหน่งของเว็บเซอร์วิส ทำหน้าที่คล้ายกับสมุดโทรศัพท์เพื่อช่วยให้ผู้ใช้บริการสามารถค้นหาเซอร์วิส ที่ต้องการได้


                                    รูปที่ 2 โมเดลการทำงานของเว็บเซอร์วิส


มาตรฐานหลักของเว็บเซอร์วิส

                มาตรฐานหลักของการพัฒนาเว็บเซอร์วิสจะประกอบไปด้วยมาตรฐานต่างๆดังนี้ XML WSDL SOAP และ UDDI รายละเอียดของแต่ละมาตรฐานมีดังนี้


1.               Extensible Markup Language (XML)

XML เป็นมาตรฐานที่ทาง W3C (World Wide Web Consortium) ประกาศให้เป็นมาตรฐานของข้อมูลเมื่อเดือนกุมภาพันธ์ ปี 1998 โดย XML จะอยู่ในรูปของไฟล์ข้อความที่ใช้ Unicode และสามารถที่สร้างรูปแบบในการที่จะแสดงข้อมูลที่ซับซ้อนในรูปแบบของข้อความที่สามารถอ่านได้ง่าย ในปัจจุบัน XML ได้ กลายเป็นมาตรฐานสำคัญสำหรับการกำหนดโครงสร้างข้อมูล เนื้อหา และรูปแบบของข้อมูลของเอกสารอิเล็กทรอนิกส์ และยังมีการพัฒนาเพื่อให้สามารถแลกเปลี่ยนข้อมูลระหว่างหน่วยงาน โปรแกรมประยุกต์ ระบบ และอุปกรณ์ต่างผ่านทางอินเตอร์เน็ตได้อีกด้วย


2.               Simple Object Access Protocol (SOAP)

SOAP เป็นภาษา XML เพื่อทำหน้าที่เป็นโพรโทคอลข่าวสาร (Message Protocol) สำหรับการแลกเปลี่ยนข้อมูลระหว่างผู้ให้บริการและผู้ใช้บริการ โครงสร้างของ SOAP จะประกอบไปด้วย

·         SOAP Envelope: ใช้ในการอธิบายข่าวสาร ระบุเนื้อหา และกระบวนการจัดการข้อมูล

·         SOAP Transport: ใช้ในการอธิบายโพรโทคอลการส่งข้อมูลเช่น HTTP หรือ SMTP

·         SOAP Encoding: ใช้ในการอธิบายการเข้ารหัสเพื่อจับคู่ชนิดข้อมูล (data type) ที่ใช้ในโปรแกรมประยุกต์กับ XML elements

                โพรโทคอล SOAP เปรียบเสมือนจดหมายที่ใช้ในการสื่อสาร แต่ยังต้องใช้โพรโทคอลในการสื่อสารอื่นๆ เช่น HTTP ในการทำหน้าที่ส่งจดหมาย SOAP เป็นโพรโทคอลแบบข้อความ ซึ่งแตกต่างกับโปรโคคอล IIOP ของ CORBA หรือ JRMP ของ RMI ที่เป็นโพรโทคอลแบบไบนารี่ จึงทำให้ SOAP สามารถที่จะใช้ส่งข้อความข้ามแฟลตฟอร์ม และระบบต่างๆ ได้ และเวอร์ชันล่าสุดของ SOAP คือ 2.0


                การส่งข้อความ SOAP มีสองรูปแบบคือ SOAP-RPC และ SOAP message โดย SOAP-RPC ใช้ในการส่งข้อความเพื่อใช้เรียกเมธอดหรือ procedure ซึ่งโดยมากจะเป็นรูปแบบ synchronous โดย SOAP จะส่ง SOAP Request และข้อมูลต่างๆ เพื่อเรียกใช้เมธอดในการประมวลผล และจะรอให้ได้ผลลัพธ์การประมวลผลที่ส่งกลับมาแบบ SOAP Response ส่วน SOAP-message ใช้ในการส่งข่าวสารหรือข้อมูลในรูปแบบ XML ระหว่างผู้ให้บริการและผู้ใช้บริการ โดยสามารถส่งได้ทั้งแบบ Synchronous และ Asynchronous

3.Web Services Description Language (WSDL)

WSDL เป็นภาษา XML ที่ใช้อธิบายเว็บเซอร์วิส โดยจะแบ่งการอธิบายเว็บเซอร์วิสเป็นสองส่วนดังนี้

o    ส่วนที่เป็นนามธรรม (Abstract) เพื่ออธิบายโอเปอเรชัน (Operation) อินพุตและเอาท์พุตพารามิเตอร์

o    ส่วนที่เป็นรูปธรรม (Concrete) เพื่ออธิบายโพรโทคอลของเน็ตเวอร์ค ตำแหน่งของจุดปลายทาง (Endpoint Address) และ รูปแบบของข้อมูล

ในปัจจุบัน W3C ได้ออกข้อกำหนดสำหรับ WSDL เป็นเวอร์ชัน 2.0 แต่คำสั่งบางคำสั่งจะไม่สอดคล้องกับเวอร์ชัน 1.0 ดังนั้นการจะเรียกใช้ WSDL ควรมีการตรวจสอบว่าเครื่องมือที่ใช้พัฒนาสอดคล้องกับเวอร์ชันใดWSDL สามารถเปรียบเทียบได้กับ Java interface ที่ใช้ใน RMI หรือ ภาษา IDL (Interface Description Language) ที่ใช้ใน CORBA สำหรับ Distributed Computing

4.Universal Description, Discovery and Integration (UDDI)

                UDDI นิยามรูปแบบและกลไกสำหรับ registry ที่ใช้ในการเก็บและประกาศข้อมูลเกี่ยวกับเว็บเซอร์วิสในรูปแบบของภาษา XML โดยที่ UDDI จะ เปรียบเสมือนสมุดโทรศัพท์หน้าเหลืองที่องค์กรธุรกิจต่างๆ ใช้ระบุและโฆษณาหมายเลขโทรศัพท์ขององค์กรเพื่อให้ผู้ใช้โทรศัพท์ค้นหาได้ โดยทั่วไป Service Registry จะใช้ UDDI เป็นมาตรฐานเพื่อให้ผู้ให้บริการสามารถลงทะเบียนประกาศเว็บเซอร์วิสได้ และผู้ใช้บริการก็สามารถจะติดต่อกับ UDDI Registry เพื่อค้นหาเซอร์วิสที่ต้องการและเรียกใช้จากผู้ให้บริการต่อไป

                ข้อมูลใน UDDI จะประกอบไปด้วยรายละเอียดเกี่ยวกับองค์กร (businessEntity) รายละเอียดเกี่ยวกับเซอร์วิส (businessService) รายละเอียดเกี่ยวกับการติดต่อ (bindingTemplate) URLสำหรับการเรียกใช้เซอร์วิส (accessPoint) และข้อมูลอ้างอิงไปยัง WSDL (tModelInstanceInfo) มาตรฐาน UDDI ล่าสุดเป็นเวอร์ชัน 3.0   นอกจากนี้เรายังสามารถที่จะแบ่ง Registry ได้เป็นสองประเภทคือ public registry ซึ่งเป็น registry ที่เปิดให้ใช้ทั่วไปทั้งภายใน และภายนอกองค์กร กับ private registry ซึ่งเป็น registry ที่เปิดให้ใช้เฉพาะภายใน การควบคุมดูแล public registry จะเป็นไปได้ยากกว่า จึงทำให้องค์กรส่วนมากจะเริ่มต้นการพัฒนาจาก private registry ก่อน

5.มาตรฐานอื่นๆ ของเว็บเซอร์วิส

                มาตรฐาน WSDL SOAP และ UDDI เป็นเพียงมาตรฐานพื้นฐานของเว็บเซอร์วิส การพัฒนาเว็บเซอร์วิสในทางปฏิบัติจำเป็นต้องพิจารณาเรื่องอื่นเช่น ความปลอดภัย Transaction หรือ Messaging เป็นต้น ดังแสดงในรูปที่ 3 ซึ่งแสดงตัวอย่างมาตรฐานเว็บเซอร์วิสอื่นๆ ตามฟังก์ชันของการทำงาน โดยจะมีมาตรฐานที่สำคัญ อาทิเช่น




รูปที่ 3 มาตรฐานต่างๆ ที่เกี่ยวข้องกับเว็บเซอร์วิส


·         WS-Addressing: มาตรฐานที่ใช้ร่วมกับ SOAP Header ในการระบุโพรโทคอลการสื่อสารและระบบข่าวสาร (Messaging Systems)

·         WS-Security: มาตรฐานที่เป็นโครงสร้าง (Framework) เพื่อเชื่อมต่อกับเทคโนโลยีระบบความปลอดภัยต่างๆ

·         SAML: Security Assertion Markup Language เป็นมาตรฐานที่ทาง OASIS กำหนดขึ้นเพื่อสนับสนุนการทำ Single Sign On (SSO) และ Authentication

·         WS-BPEL: มาตรฐานสำหรับการประกอบ (orchestration) กระบวนการทางธุรกิจ (Business Process) โดยใช้คำสั่งที่เป็นภาษา XML

·         WSRP: Web Services for Remote Portal มาตรฐานสำหรับการเรียกใช้ Web Services จากเว็บท่า (Portal)

การพัฒนา SOA โดยใช้เว็บเซอร์วิส

                แม้การพัฒนาสถาปัตยกรรมเชิงบริการ (Service Oriented Architecture หรือ SOA) ในยุคแรกจะสามารถทำได้โดยใช้เทคโนโลยีอื่นๆ อาทิเช่น CORBA, Java RMI และ DCOM หรือสามารถใช้ MOM (Message Oriented Middleware)เพื่อพัฒนา SOA ในรูปของการแลกเปลี่ยนข้อมูลของสถาปัตยกรรม EAI ที่นิยมใช้ทั่วไป แต่ในปัจจุบันการพัฒนา SOA โดยใช้เทคโนโลยีเว็บเซอร์วิสเริ่มได้รับการยอมรับมากกว่าเทคโนโลยีอื่นๆ ด้วยเหตุผลดังนี้

·         เว็บเซอร์วิสอิงอยู่กับมาตรฐานที่เปิดเช่น SOAP WSDL UDDI และ มาตรฐานเว็บเซอร์วิสอื่นๆ ทำให้องค์กรต่างไม่จำเป็นที่จะต้องลงทุนกับโซลูชันที่ใช้เทคโนโลยีเฉพาะ และป้องกันการผูกขาดโดยผู้ผลิตรายใดรายหนึ่ง

·         เว็บเซอร์วิสสนับสนุนการเชื่อมโยงกับโซลูชันของผู้ผลิตต่างๆ ทำให้ช่วยลดต้นทุน

·         เว็บเซอร์วิสสนับสนุนการเชื่อมโยงระบบ แพลตฟอร์ม และโซลูชันต่างๆทั้งภายในองค์กร ระหว่างองค์กร และภายนอก


รูปที่ 4 แสดงตัวอย่างการพัฒนา SOA โดยใช้เทคโนโลยีเว็บเซอร์วิส สร้างเซอร์วิสจากเทคโนโลยีที่ต่างกันคือ IMS, CORBA, Java EE และ Workflow โดยมีสถาปัตยกรรมแต่ละส่วนดังนี้

·         Business Service Tier : ประกอบด้วยเซอร์วิสที่พัฒนามาจากเทคโนโลยี IMS, CORBA และ โปรแกรม Workflow และมีเว็บเซอร์วิสที่พัฒนาโดยใช้เทคโนโลยีJava EE

·         Business Access Tier : จะมี Service Registry (เช่น UDDI) สำหรับการลงทะเบียนและค้นหาเว็บเซอร์วิส ดังนั้นจึงต้องมี Legacy gateways เพื่อแปลงเซอร์วิสที่ใช้เทคโนโลยีให้เป็นเว็บเซอร์วิสสำหรับIMS, CORBA และใช้ WebSphere MQ เพื่อแปลง Workflow ให้เป็นเว็บเซอร์วิส

·         Communication Infrastructure : จะใช้โพรโทคอล SOAP บน HTTP และ SOAP ที่ใช้มาตรฐาน WS-ReliableMessaging

·         Client/Presentation : ตัวอย่างนี้แสดงการใช้โปรแกรมแสดงผลที่พัฒนาโดยเทคโนโลยี .NET



                        รูปที่ 4 ตัวอย่างการพัฒนา SOA โดยใช้เทคโนโลยีเว็บเซอร์วิส


การพัฒนาเว็บเซอร์วิสโดยใช้เทคโนโลยีจาวา

การ พัฒนาเว็บเซอร์วิสสามารถแบ่งได้ตามบทบาทของผู้เกี่ยวข้องคือ การพัฒนาเพื่อเป็นผู้ให้บริการ การพัฒนาเพื่อเป็นผู้ใช้บริการ และการพัฒนาสำหรับ Service Registry เทคโนโลยีจาวาที่สามารถจะพัฒนาเว็บเซอร์วิสได้จะอยู่ในแพลตฟอร์มที่เป็น Java EE โดยใน Java EE 5 ได้กำหนดคำสั่ง API สำหรับภาษาจาวาในการเรียกใช้ XML ต่างๆ ดังนี้



·         JAX-WS (Java API for XML-Based Web Services) เป็นชุดคำสั่งภาษาจาวาเพื่อพัฒนาให้บริการเว็บเซอร์วิสและเรียกใช้เว็บเซอร์วิส โดยจะสนับสนุนมาตรฐานต่างๆของ W3C เช่น SOAP และ WSDL และสนับสนุนการส่งข้อมูลทั้งแบบ Asynchronous และ Synchronous พร้อมทั้งทำการ binding ข้อมูลโดยใช้ JAXB ดังนั้นนักพัฒนาโปรแกรมสามารถใช้ภาษาจาวาสร้างและเรียกเว็บเซอร์วิสได้ โดยไม่จำเป็นต้องพัฒนา SOAP หรือ WSDL เอง

·         JAXB (Java Architecture for XML Binding) เป็นชุดคำสั่งภาษาจาวาเพื่อทำการจับคู่ (mapping) ข้อมูลที่เป็นภาษา XML กับออปเจ็คที่เป็นจาวาคลาส

·         JAXP (Java API for XML Processing) เป็นชุดคำสั่งภาษาจาวาเพื่อแปล แปลง ตรวจสอบความถูกต้อง และค้นหา เอกสารหรือไฟล์ที่เป็นภาษา XML

·         SAAJ (SOAP with Attachments API for Java) เป็นชุดคำสั่งภาษาจาวาเพื่อสนับสนุนการส่งเอกสาร XML ผ่านอินเตอร์เน็ต

·         JAX-RPC (Java API for XML-Based RPC) เป็นชุดคำสั่งสำหรับพัฒนาเว็บเซอร์วิสเช่นเดียวกับ JAX-WS แต่จะใช้สำหรับ J2EE เวอร์ชัน 1.4 และสนับสนุน SOAP 1.1

·         WSIT (Web Services Interoperability Technology) เป็นชุดคำสั่งภาษาจาวาเพื่อเชื่อมโยงระหว่าง Java EE และ .NET 3.0 ช่วยในการพัฒนาโปรแกรมผ่านสถาปัตยกรรม SOA


สำหรับแพลตฟอร์ม Java SE จะมี API สำหรับ XML อยู่ในเวอร์ชัน 6 (Java SE 6) โดยจะมีชุดคำสั่ง JAX-WS 2.0 JAXB 2.0 และ SAAJ 1.3

                การพัฒนาเพื่อให้บริการเว็บเซอร์วิสจะต้องใช้แพลตฟอร์ม Java EE ซี่ง Server ที่เป็น Java EE จะมองการให้บริการเว็บเซอร์วิสเป็นเพียงพอร์ตหรือช่องทาง (channel)หนึ่งในการบริการเซอร์วิส ดังนั้นจึงไม่มีผลทำให้สถาปัตยกรรมเปลี่ยนไป และสามารถนำคอมโพเน้นท์ของ Java EE (เช่น Session Bean) ที่มีอยู่มาพัฒนาเป็นเว็บเซอร์วิสได้โดยง่าย นอกจากนี้การพัฒนาเว็บเซอร์วิสบนเทคโนโลยีจาวา ยังสามารถที่จะได้ใช้จุดเด่นของแพลตฟอร์ม Java EE ในด้านความปลอดภัย ความเชื่อมั่น (Reliability) และการรองรับผู้ใช้จำนวนมาก (Scalability)

                เว็บเซอร์วิสคือพอร์ตหนึ่งในแพลตฟอร์ม Java EE ซึ่งจะทำงานภายใน Java EE Container โดย container จะเป็น Runtime environmentของคอมโพเน้นท์ที่เป็นเว็บเซอร์วิส โดยมีคำสั่ง JAX-WS หรือ JAX-RPC ในการที่จะติดต่อกับ Runtime environment อีกชั้นหนึ่ง โดยทั่วไปเราสามารถที่จะสร้างคอมโพเน้นท์ของเว็บเซอร์วิสได้สองประเภทดังแสดงในรูปที่ 5 คือ

·         เว็บเซอร์วิสแบบWeb-tier (โดยใช้ Servlet endpoint) ตัวอย่างเช่น Tomcat หรือ Axis

·         เว็บเซอร์วิสแบบEJB-tier (โดยใช้ Session Bean endpoint) ตัวอย่างเช่น Sun Java Application Server


การพัฒนาเว็บเซอร์วิสสำหรับหน่วยงานขนาดเล็กอาจสามารถทำได้โดยใช้ เว็บเซอร์วิสแบบ Web-tier แต่หากต้องพัฒนาเพื่อรองรับผู้ใช้จำนวนมากจำเป็นต้องใช้ เว็บเซอร์วิสแบบ EJB-tier ดังนั้นผู้พัฒนาเว็บเซอร์วิสโดยใช้เทคโนโลยีจาวาควรจะมีความเข้าใจเรื่อง Application Server และสามารถพัฒนา EJB ได้








รูปที่ 5 Java Web Service Components


แม้ หลักการของเว็บเซอร์วิส จะอิงอยู่กับมาตรฐานต่างๆ แต่การพัฒนาเว็บเซอร์วิสโดยใช้เทคโนโลยี จาวาสามารถทำได้โดยไม่ต้องพัฒนาโพรโทคอล SOAP หรือ WSDL โดยตรง นอกจากนี้ยังมีเครื่องมือเพื่อให้สามารถพัฒนาโปรแกรมได้โดยง่ายเช่น NetBeans 5.5 ผู้ที่สนใจจะพัฒนาเว็บเซอร์วิสโดยใช้ NetBeans

บทสรุป

เว็บเซอร์ วิสเป็นซอฟต์แวร์คอมโพเน้นท์ ที่ให้บริการผ่านเทคโนโลยีอินเตอร์เน็ตโดยใช้มาตรฐานเปิด มาตรฐานพื้นฐานของเว็บเซอร์วิสประกอบด้วย XML SOAP WSDL และ UDDI เว็บเซอร์วิสเป็นเทคโนโลยีที่เหมาะสมในการนำไปพัฒนา SOA ทั้ง นี้เนื่องจากใช้มาตรฐานเปิดและไม่ผูกติดอยู่กับเทคโนโลยีใดเทคโนโลยีหนึ่ง แต่การพัฒนาเว็บเซอร์วิสในทางปฏิบัติยังต้องคำนึงถึงมาตรฐานอื่นๆอีกมากเช่น เรื่องความปลอดภัย เราสามารถที่จะพัฒนาเว็บเซอร์วิสโดยใช้เทคโนโลยีจาวาได้ ซึ่งจะมีจุดเด่นในด้านความปลอดภัย ความเชื่อมั่น และความสามารถในการรองรับผู้ใช้จำนวนมาก




แหล่งที่มา :

http://www.thaijavadev.com/soa/articles/WSIntro/WSIntro.html

http://th.wikipedia.org/wiki_Web_Service