Friday, 24 August 2007

Spring Web Services ไม่ใช้ JAX-WS ในการสร้าง WSDL

จากข่าววันก่อนเรื่อง "Interface21 ประกาศออก Spring Web Services 1.0"
มีประเด็นที่น่าสนใจคือ Spring ไม่ใช้ JAX-WS ในการสร้าง WSDL

Spring Web Services ใช้วิธีที่ชื่อ Contract-First ในการสร้าง WSDL ซึ่งพัฒนามาจาก lab ของ Spring เอง

สาเหตุที่ Spring ไม่ใช้ JAX-WS เพราะว่า
JAX-WS ยังมีความผิดพลาดเรื่อง ORM ย่อมาจาก Object/Relational impedance Mismatch (คือการเปลี่ยน Object ของ Java ให้กลายเป็น XML เพื่อส่งออกไปให้กับ client ที่ได้ร้องขอบริการเว็บเซอร์วิส)

ลองดูตัวอย่างดังนี้

การที่ Java มีโครงสร้างข้อมูลที่ซับซ้อน
ทำให้ระบบอื่นๆที่ไม่ใช่ Java เช่น .NET

เมื่อ .NET มาเรียกใช้ services ที่มีการส่งค่ากลับไป
ด้วยโครงสร้างข้อมูล java.util.TreeMap


public Map getFlights() {
// use a tree map, to make sure it's sorted
TreeMap map = new TreeMap();
map.put("KL1117", "Stockholm");
...
return map;
}

เมื่อแปลงเป็น XML แล้วส่งไปให้กับ .NET แล้ว
ปรากฎว่า .NET ไม่มีชนิดข้อมูลที่ตรงกับ Java เลย
.NET จะใช้โครงสร้างข้อมูล System.Collections.Hashtable มารับแทน
จะเห็นว่าโครงสร้างข้อมูลสองอย่างนี้ แทบไม่เหมือนกันเลย

อีกประเด็นคือนี่คือปัญหาหนึ่งปัญหา
บาง service จะส่งข้อมูลด้วยโครงสร้างแบบ Cyclic graphs
XML ที่ได้ออกมาจะซับซ้อนมากดังนี้


<flight number="KL1117">
<passengers>
<passenger>
<name>Arjen Poutsma</name>
<flight number="KL1117">
<passengers>
<passenger>
<name>Arjen Poutsma</name>
<flight number="KL1117">
<passengers>
<passenger>
<name>Arjen Poutsma</name>
...
ดังนั้น Interface21 จึงได้พัฒนากรรมวิธีการสร้าง WSDL ขึ้นมาเอง
โดยใช้แนวคิดที่ชื่อว่า Contract-First Development
หากต้องการทราบในรายละเอียดของแนวคิดนี้ทั้งหมด อ่านต่อได้ที่นี่

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

3 comments:

OrangeGears Project said...

กำลังมองดู Spring Remote จะเอามาใช้กับ OrangeGears Project มีคำแนะนำอะไรบ้างมั้ยครับ

Kim said...

ofbiz ใช่มั้ยครับ คุณ OrangeGears
งั้นต้องขอผมศึกษา ofbiz ก่อนครับ
เคยเล่นแต่ compiere บน jboss

ofbiz ผมว่าน่าสนใจขึ้นมาก ๆ
ตั้งแต่ย้ายมาอยู่ในค่าย Apache ครับ

Sand said...

มาแนะนำเว็บไซต์ www.ofbizguru.com เว็บไซต์สนับสนุนและช่วยเหลือ ผู้ใช้ OFBiz