จะมีศัพท์พื้นฐานที่ต้องทำความเข้าใจอยู่จำนวนหนึ่ง
ไม่เช่นนั้นอาจจะต้องปวดหัวกับการ ส่ง message ไม่ได้
หรือ message วิ่งหายต๋อมไม่รู้ไปไหน
ศัพท์ตัวแรกก็คือคำว่า interface
เป็นศัพท์ที่ define ไว้ใน spec ของ WSDL 2.0
มีความหมายเดียวกับ คำว่า porttype ใน spec WSDL 1.1
10 ปากว่า ไม่เท่าตาเห็น
ลองดู WSDL 1.1 ของ google ดู
<portType name="GoogleSearchPort">
<operation name="doGoogleSearch">
<input message="typens:doGoogleSearch"/>
<output message="typens:doGoogleSearchResponse"/>
</operation>
</portType>
ถ้าเปรียบเทียบกับ OOP term
interface ใน WSDL 2.0 ก็มีความหมายเหมือนกัน interface ใน OOP
ศัพท์ตัวถัดไปก็คือ service
ความหมายก็คือ implementation ของ interface นั่นเอง
ศัพท์ตัวถัดไปก็คือ endpoint
endpoint คือจุดที่เกิดการเชื่อมต่อจริงๆ
คล้ายๆความหมายของ port ในเรื่อง socket (network)
ลองดูความหมายที่ WSDL 2.0 define ไว้ (JBI endpoint มีความหมายเดียวกับ WSDL endpoint)
Endpoints, in WSDL 2.0, refer to a particular address, accessible by a particular protocol, used to access a
particular service
ความสัมพันธ์ระหว่าง service กับ endpoint เป็น one-to-many ก็คือ
service หนึ่งๆมี endpoint ได้หลาย endpoint
เวลาเราส่ง Message ใน JBI
เราสามารถระบุ target ที่จะส่งได้ 2 วิธีคือ
- ระบุแค่ service name
ถ้าระบุแค่นี้ ตัว JBI container จะตัดสินให้ว่า ควรจะส่งให้ endpoint ไหนดี - ระบุทั้ง service name และ endpoint name (มีศัพท์เรียกว่า service endpoint)
ที่นี้ลองดูที่ jbi.xml จริงๆบ้าง
<services binding-component="false"
xmlns:logger="http://pok/dblogger/">
<provides interface-name="logger:log-interface"
service-name="logger:log"/>
</services>
source ข้างบนก็คือ การ define service ของ provider
จะเห็นว่ามีการระบุ
interface-name
กับ service-name
ถ้าเราไปดู source code ของ Java Class ที่ implement service นี้
public class DbLoggerComponent implements
ServiceInterfaceImplementation,
ServiceEndPointImplementation {
public QName getInterfaceName() {
return new QName("http://pok/dblogger/",
"log-interface");
}
public void onMessage(MessageExchange msg) {
...
}
}
จะเห็นว่ามี method ที่ชื่อ
getInterfaceName
เวลาเราเขียน component ใน servicemix
เราสามารถเลือกวิธีเขียนได้ 2 วิธีคือ
- implment interface ของ JBI-api ด้วยตนเอง
- ใช้ client-api ของ ServiceMix
อันนี้จะสะดวกสบายขึ้นหน่อย จำนวนบรรทัดของ source code
ที่เขียน จะลดลงหน่อย
ในที่นี้เราจะพูดถึงการเขียน component แบบที่ใช้ client-api เท่านั้น
เริ่มโดย เวลาเราเขียน component เราก็จะเขียน class ที่ implement
interface
ServiceInterfaceImplementation
ซึ่งใน interface นี้จะบังคับให้เรา implement method ที่ชื่อ
getInterfaceName
ส่วน service name และ endpoint name
คงจะใช้การ lookup จาก jbi.xml
กรณีที่เรามี endpoint มากกว่า 1 endpoint ใน 1 service
การ implement แค่
ServiceInterfaceImplementation
จะไม่เพียงพอ ต้องมีการ implement
ServiceEndPointImplementation
interface นี้จะบังคับเราให้เรา implement method
getServiceName
กับ
getEndpointName
No comments:
Post a Comment