จากข่าววันก่อนเรื่อง "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
เมื่อแปลงเป็น XML แล้วส่งไปให้กับ .NET แล้ว
public Map getFlights() {
// use a tree map, to make sure it's sorted
TreeMap map = new TreeMap();
map.put("KL1117", "Stockholm");
...
return map;
}
ปรากฎว่า .NET ไม่มีชนิดข้อมูลที่ตรงกับ Java เลย
.NET จะใช้โครงสร้างข้อมูล System.Collections.Hashtable มารับแทน
จะเห็นว่าโครงสร้างข้อมูลสองอย่างนี้ แทบไม่เหมือนกันเลย
อีกประเด็นคือนี่คือปัญหาหนึ่งปัญหา
บาง service จะส่งข้อมูลด้วยโครงสร้างแบบ Cyclic graphs
XML ที่ได้ออกมาจะซับซ้อนมากดังนี้
ดังนั้น Interface21 จึงได้พัฒนากรรมวิธีการสร้าง WSDL ขึ้นมาเอง
<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>
...
โดยใช้แนวคิดที่ชื่อว่า Contract-First Development
หากต้องการทราบในรายละเอียดของแนวคิดนี้ทั้งหมด อ่านต่อได้ที่นี่
บทความที่เกี่ยวข้อง
3 comments:
กำลังมองดู Spring Remote จะเอามาใช้กับ OrangeGears Project มีคำแนะนำอะไรบ้างมั้ยครับ
ofbiz ใช่มั้ยครับ คุณ OrangeGears
งั้นต้องขอผมศึกษา ofbiz ก่อนครับ
เคยเล่นแต่ compiere บน jboss
ofbiz ผมว่าน่าสนใจขึ้นมาก ๆ
ตั้งแต่ย้ายมาอยู่ในค่าย Apache ครับ
มาแนะนำเว็บไซต์ www.ofbizguru.com เว็บไซต์สนับสนุนและช่วยเหลือ ผู้ใช้ OFBiz
Post a Comment