Professional Documents
Culture Documents
1
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
บทที่ 1 สถาปตยกรรมบนฐานของบริการ (Service Oriented Architecture)
ในบทนี้จะกลาวถึง Service Oriented Architecture (SOA) ซึ่งเปนเทคโนโลยีที่ Grid Service และ Web
Service ใชเปนพื้นฐานในการพัฒนา โดยจะขอกลาวถึง Web Service กอน
1.2.1 Element ที่สําคัญประกอบดวย Service Provider, Service Requestor และ Service Registry ซึ่งแสดงในรูป
1.1
- Service Provider เปนผูใหบริการ มีหนาที่ในการเปดบริการเพื่อรองรับการขอใชบริการจาก Requestor
ที่เรียกเขามาขอใช โดยจะสราง service description และนําไปลงทะเบียนเก็บไวที่ Service Registry
- Service Requestor เปนใครก็ตามที่ตองการเรียกใชบริการจาก Service Provider ซึ่งสามารถคนหา
บริการที่ตองการไดจาก UDDI registry หรือ Service Registry หรือติดตอจาก Provider โดยตรง
- Service Registry ทําหนาที่เปนตัวกลางในการจัดเก็บ service description ที่ลงทะเบียนไวโดย Service
Provider และจัดสง service description ใหกับ Service Requestor เมื่อมีการมาคนหา service description ที่
ตองการ
2
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
1.2.2 Operation จะกําหนดการติดตอระหวาง elements ซึ่งประกอบดวย Publish, Find และ Bind ที่แสดงในรูป
1.1
- Publish operation คือการาติดตอกันระหวาง Service Provider และ Service Registry โดย Service
Provider จะลงทะเบียนที่ service interfaces ซึ่ง Publish operation จะจัดเตรียมใหที่ Service Registry
- Find operation คือการติดตอกันระหวาง Service Requestor และ Service Registry โดย Service
Requestor ใช Find operation ไปดึงเอารายการที่ตองการของ Service Provider ซึ่งประกาศไวใน Service
Registry
- Bind operation คือการติดตอกันระหวาง Service Requestor และ Service Provider มันจะให Service
Requestor เชื่อมตอกับ Service Provider กอนที่จะรองขอ operation โดยเฉพาะ Service Requestor สามารถ
generate client-side proxy สําหรับ service ไดโดยมี Service Provider เปนตัวจัดเตรียมให (bind สามารถเปนได
ทั้ง dynamic หรือ static ) ในกรณีที่ bind เปนdynamic ทําให Service Requestor สามารถ generate client-side
proxy บน sevice description ซึ่งไดจาก Service Registry ที่เวลามีการรองขอ service และในกรณีที่ bind เปน
static ทำให Service Requestor สามารถ generate client-side proxy ไดระหวางที่ทําการพัฒนาแอปพิเคชั่น
3
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
สําหรับเปาหมายของ Grid service เปนการใชแนวคิดพื้นฐานของ Web service ใหเปนประโยชน ซึ่ง
Web service Description Language (WSDL) จะอธิบายรายละเอียดและการใชงาน service ตาง ๆ การพัฒนา
มาตรฐานของ SOAP โพลโตคอลสําหรับการแลกเปลี่ยน message ระหวาง service และ Universal Description
Discovery and Integration (UDDI) เปนแหลงจัดเก็บที่อยูและการคนหา service ตาง ๆ ที่ลงทะเบียนไว
เอกสาร WSDL ประกอบดวย 3 สวน คือ Service Interface, Service Bindings, Service Implementation
ซึ่งเกี่ยวของกับขอมูลของ Web service ซึ่ง service จะกําหนดโครงสรางในการติดตอสื่อสารขอมูลและการลง
นามของ operation ที่จัดเตรียมโดย service ในภาษา, แพลตฟอรม และโพลโตคอลในการติดตอสื่อสาร
1.3.1.1 Service Interface มีสวนประกอบทีสําคัญคือ Types, Message, Operation และ Port Type
- Types เปนการกําหนดการใช data type โดยการแลกเปลี่ยน message ระหวาง Service Requestor และ
Service Provider
- Messages เปนการแสดงสัญญาณระหวาง Service Requestor และ Service Provider ถา operation คือ
Remote Procedure Call (RPC) มันจะสงคากลับมา ถาเปน bi-directional และกําหนดดวยสอง message
(ในตัวอยางคือ) getMOTDRequest และ getMOTDResponse โดย getMOTDRequest message เปนการ
สงจาก Service Requestor ไปที่ Service Provider และ Service Provider ตอบกลับโดยการสง
getMOTDResponse message ไปที่ Service Requestor อีกครั้ง message สามารถมี types parts ไดหนึ่ง
ตัวหรือมากกวา
- Operation เปนการอธิบายการทํางานของ Web service โดย operation ของ Message Exchange
Patterns (MEP) จะมีอยู 4 ประเภท คือ One-way, Request-response, Solicit-response และ Notification
4
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
5
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
บทที่ 2 สถาปตยกรรมแบบเปดของGrid service
6
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
GT3 เปรียบเสมือนอิฐ ปูนซีเมนตและไมคาน สําหรับกอสรางบาน แตในที่นี้ GT3 ก็เสมือนเครื่องมือสําหรับสราง
Grid service เพื่อใชงานจริงนั่นเอง”
7
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
• ความเปนอิสระ (Independency) Web service มีคุณสมบัติไมยึดติดกับแพลตฟอรม (platform-
independent) และไมยึดติดกับภาษา (language-independent) สาเหตุที่ทําให Web service มีคุณสมบัติ
เชนนี้ก็เพราะวา Web service ไดใชมารตฐานของภาษาที่ชื่อ eXtended Markup Language (XML)
นั่นเอง ซึ่งทําใหนักพัฒนาระบบมีอิสระในการเลือกใชเทคโนโลยีวาจะพัฒนาโปรแกรมบนฝง client
หรือ server ดวยเทคโนโลยีใด และเทคโนโลยีในการพัฒนาบนฝง client กับ server ไมจําเปนตอง
เหมือนกันก็ได เชน โปรแกรมทางฝง client อาจจะถูกพัฒนาดวย Microsoft Visual C++.NET ซึ่งทํางาน
บน Microsoft Windows XP แตทวาโปรแกรมบนฝง server อาจจะถูกพัฒนาโดยภาษา Java ที่ทํางานบน
Sun Solaris 9 ก็ได
• ขอบเขตที่ขยายอยางกวางขวาง (Scalability) โดยสวนใหญแลว Web serviceใชโปรโตคอล HTTP
สําหรับรับสงขอมูลไปมาระหวาง client กับ server และดวยความสามารถนี้ของWeb service มันทําให
การเชื่อมโยงโปรแกรมตางๆจากหลากหลายองคกรบนเครือขายอินเตอรเน็ตเปนไปอยางกวางขวางมาก
ยิ่งขึ้น เพราะโปรโตคอล HTTP เปนโปรโตคอลที่ไฟรวอล (Firewall) ขององคกรตางๆยอมรับ (ตางจาก
โปรโตคอล RMI, CORBA และเทคโนโลยีอื่นๆที่มักจะถูกไฟรวอลสกัดกั้นไว)
8
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
เดียวกันมากกวา แตWeb service เปนเทคโนโลยีที่เนนการสรางระบบแบบ Loosely coupled กลาวคือ
โปรแกรมทางฝง client ไมจําเปนตองรูจักบริการที่มีอยูบนฝง server มากอน รวมถึงไมจําเปนตองทราบ
วิธีการรองขอWeb service กอนวาตองทําเชนไร ซึ่งWeb service จะมีวิธีการระบุถึงวิธีการรองขอ Web
service โดยการอางผานไฟล XML ที่เรียกวา WSDL และรูปแบบของระบบแบบ Loosely couple นี้มัก
เหมาะสมกับการใชงานระหวางองคกร หรือองคกรเดียวกันแตอแยกการบริหารเปนสาขาหลายสาขา
ผานเครือขาย extranet หรือ Internet ซึ่งระบบกริดก็ตองการคุณสมบัติในการพัฒนาระบบแบบ Loosely
coupled อยางที่ Web service มีเชนกัน
1. ขั้นตอนคนหาWeb service
อยางที่เราเคยไดกลาวในหัวขอที่ผานมาแลววา client อาจจะยังไมรูจักที่อยูของWeb service ที่ตองการวาจะไป
รองขอไดจากที่ใด ดังนั้นขั้นตอนแรกของการรองขอ Web service ก็คือ การคนหาWeb service ซึ่งผูรองขอใช
บริการหรือที่เรียกวา Service requestor จะทําการรองขอใชระบบการคนหาบริการที่ตองการจากระบบจัดเก็บ
ทะเบียนของWeb service หรือที่เรียกวา Universal Directory, Discovery, and Integration (UDDI) ผมขอ
ยกตัวอยางขั้นตอนนี้จากภาพเชน หากคุณคือ Service requestor ที่ตองการบริการพยากรณอากาศของประเทศไทย
9
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
ที่ชื่อวา WeatherService (จากรูปภาพ สมมติเปนบริการสําหรับทํางานที่ชื่อ X) โปรแกรมฝง client จะรองขอใช
ระบบการคนหา Web service จาก UDDI
2. ขั้นตอนคืนคาการคนหา Web service
จากขั้นตอนแรก หลังจากที่ Service requestor ขอใชระบบการคนหาWeb service จาก UDDI แลว UDDI จะทํา
การคนหา Web service ในทะเบียนของ Web service ที่เคยไดลงทะเบียนไวกับ UDDI ซึ่งถาจะเปรียบเปรยนั้น
UDDI ก็เปนเสมือนสมุดหนาเหลืองที่เก็บทะเบียนของWeb service เพื่อทําให Service requestor ทราบถึงที่อยูเพื่อ
ติดตอกับ Web service นั้นได
3. ขั้นตอนสอบถามวิธีการใชงานWeb service
หลังจากที่ Service requestor ทราบถึงที่อยูของWeb service แลว (ซึ่งก็คือ server ที่ Web serviceนั้นทํางานอยู)
Service requestor จะยังไมสามารถเขาใชบริการจากWeb service นั้นได จนกวา Service requestor จะทราบถึง
รายละเอียดของวิธีการใชงาน Web service นั้น โดย Service requestor จะทําการสอบถามวิธีการใชงานWeb
service จาก server ที่เปดบริการWeb service นั้น ยกตัวอยางเชน หากเราทราบที่อยูของบริการพยากรณอากาศของ
ประเทศไทย แตอยางไรก็ตาม เราคงจะยังไมทราบถึงฟงกชันการทํางานที่ Web service นั้นจัดเตรียมไวให (ศัพท
ที่เราใชเรียกฟงกชันของเว็บเซอรนั้น อาจจะเรียกวา remote method) รวมถึงพารามิเตอรที่เราตองใสเขาไปและ
คาที่จะคืนจากWeb service นั้นดวย ซึ่งฟงกชันของการพยากรณอากาศนั้นอาจจะอยูในรูปแบบ String
forcast(String provinceName) โดยฟงกชันนี้เราตองใสชื่อจังหวัดขที่ตองการคําพยากรณ และผลลัพธจากฟงกชัน
ก็คือคําพยากรณ
10
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
2.2.2 การอางอิงที่อยูของ Web service
ในระบบเครือขายนั้นประกอบไปดวยทรัพยากรตางๆมากมาย การที่เราจะอางอิงถึงทรัพยากรที่เรา
ตองการนั้น ระบบจําเปนตองมอบหมายที่อยูที่เปนเอกลักษณใหแกทรัพยากรแตละตัว ซึ่งวิธีการอางอิงถึงที่อยู
ของทรัพยากรที่เราใชกันอยางกวางขวางนั้น เราจะใชวิธีการอางอิงที่เรียกวา Uniform Resource Identifier (URI)
สําหรับการอางอิงไปหา Web service นั้น เราก็ใช URI เชนกัน
อยางที่เราไดกลาวมาแลววา เทคโนโลยี Web service จะมี UDDI ที่ทําหนาที่เก็บทะเบียนหรือที่อยูของ
Web service ซึ่งผลลัพธจากการสอบถามที่อยูของWeb service ผาน UDDI นั้น จะถูกตอบกลับมาในรูปแบบ URI
นั่นเอง เพื่อเปนการเห็นภาพใหมากยิ่งขึ้น ดูตัวอยาง URI ของ Web service หนึ่งตอไปนี้
http://webservice.hpcnc.ku.ac.th/weather/th/WeatherService
11
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
• เลเยอรการคนหาบริการ (Service Discovery Layer)
เลเยอรนี้เปนเลเยอรที่เสนอวิธีการสําหรับการคนหา Web service ที่ Service requester ตองการ โดย
เทคโนโลยี Web service ไดจัดเตรียมกลไกที่ชื่อ UDDI สําหรับการคนหา Web service อยางที่ไดกลาว
ไวแลวในขางตน
12
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
• Web service ใหบริการแบบ stateless
คุณสมบัติ stateless หมายถึงวา Web service ไมสามารถจดจําคาหรือสถานะที่แลวมาวาไดทําอะไร
ไปและเคยไดผลลัพธอะไรแลวบาง กลาวคือ ถาเรามีการรองขอ operation (หรือเรียก method) หนึ่ง
ของ Web service แลวหากคุณเรียก operation ตัวอื่นหรือแมกระทั่งเรียก operation เดิม Web service
จะจําไมไดวาผลลัพธที่ไดจากการทํา operation ตัวกอนหนานี้มีคาเทาไหร ซึ่งวิธีการแกปญหานี้ของ
Web service สามารถแกไดที่ฝง client โดยใหโปรแกรมฝง client จดจําคาของแตละ operation กอนที่
จะเรียก operation ครั้งตอไป และก็ตองปอนคาเดิมกลับไปที่ operation ครั้งใหมนี้อีกครั้ง หรืออีกวิธี
หนึ่งก็คือ ให Web service เขียนคาลง storage หาก Web service ตองการรื้อฟนความจําก็จะกลับไป
อานที่ storage กอน
ดวยขอจํากัดของ Web service ทั้งคุณสมบัติ stateless และ non-transient จึงเปนจุดที่ Grid service นํามา
ปรับปรุงใหดียิ่งขึ้นโดย Grid service มีคุณสมบัติแบบ stateful และ transient
13
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
ในหัวขอถัดไปเราจะกลาวถึงกลไกที่ทําให Grid service สามารถมีคุณสมบัติอยาง stateful และ transient
ได ซึ่งกลไกนั้นมีชื่อวา Factory
จากรูปที่ 2.4 ที่แสดงดานบนนี้ เปนรูปที่แสดงใหเห็นถึงการติดตอระหวาง client กับ Factory โดยมี Factory ที่ชื่อ
วา MathService Factory ซึ่งเปน Factory สําหรับสรางและทําลายบริการที่ชื่อวา MathService โดยภาพไดแสดงให
เห็นวามีกลุมของ client อยู 4 client ที่ตางใช MathService ที่สรางโดย Factory รวมกัน ซึ่งอาจจะเปนไปไดวา
client D เปน client ที่รองขอให MathService Factory สรางกลุมของ instance ของ MathService เพื่อบริการแก
client A, client B และ client C ซึ่งจะเห็นไดวา client C อาจจะเปน client เดียวที่ครอบครอง instance ของ Math
service เพียง instance เดียวไวใชเพียงลําพัง แต client B ใช instance ของ MathService รวมกับ client A ก็ได
14
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
• Life cycle management เปนกลไกสําหรับการจัดการวงจรชีวิตของ Grid service โดย Grid service จะมี
วงจรเปนระยะตางๆนับตั้งแต Grid service เกิด จนถึง Grid service กําลังใหบริการ จนกระทั่ง Grid
service หมดชวงชีวิต (หรือตาย)
อยางที่เราไดกลาวถึงวิธีการระบุที่อยูของ Web service ไปแลววา เราระบุที่อยูของ Web service ดวย URI (หรือ
URL) ของ Web service แตทวา การระบุที่อยูของ Grid service ก็ใช URI เชนกัน แตจะไมเรียกวา URI ก็เทานั้น
ซึ่งเราจะเรียก URI ของ Grid service วา Grid Service Handle หรือ GSH
OGSA ไดใหขอกําหนดวา ที่อยูของ Grid service ตองไมซ้ํากัน โดยเปนไมไดที่ instance ของ Grid
service 2 instance จะมี GSH เหมือนกัน แมวา Grid service นั้นจะถูกสรางมาจาก Factory เดียวกันก็ตาม โดย
OGSI ไดกําหนดให Factory เปนตัวกําหนด GSH ใหแตละ Grid service ใหแตกตางกัน แตทวาเพียง GSH อยาง
เดียวนั้นไมไดบงบอกถึงวิธีในการติดตอกับ Grid service แตอยางใด เชน ไมไดบอกถึง operation หรือ method
ของ Grid service วาไดใหบริการอะไรบางและจะสง parameter อะไรบางเขาไปใน operation เหลานั้น เปนตน
โดยสวนที่บงบอกวิธีการในการติดตอกับ Grid service จะกําหนดไวใน Grid Service Reference หรือ GSR โดย
ขอกําหนดของ OGSI ไมไดนิยามวา GSR จะตองมีรูปแบบอยางไรในการอธิบายถึงวิธีในการติดตอกับ Grid
service แตเนื่องจากวา Grid service ไดใช SOAP เปนโปรโตคอลในการรับสงขอมูลระหวาง Grid service กับ
client อยูแลว ดังนั้น OGSI จึงเลือกให GSR ถูกจัดอยูในรูปแบบของเอกสาร WSDL
15
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
บทที่ 3 กลไกสําคัญของ Grid service
16
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
3.2 กลไกกําหนดขอมูลใหกับ Grid service (Service Data Elements)
17
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
18
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
จากรูปที่ 3.2 ดานบนนี้ แสดงใหเห็นถึงกระบวนการของกลไก Notification ซึ่งการทํา Notification จะประกอบ
ไปดวยกลุมของผูที่สนใจเหตุการณหรือขาว และเราจะเรียกกลุมนี้วา Notification sink ซึ่งอาจจะเปนโปรแกรม
ทางฝง client หรืออาจจะเปน Grid service ก็ได โดยกลุมผูสนใจเหตุการณตองสมัครเขาใชบริการ Notification
จาก Grid service ที่มีเหตุการณหรือขอมูลที่สนใจ และเราเรียก Grid service นี้วา Notification source โดย
Notification source จะติดตอไปที่บริการหนึ่งที่เรียกวา Subscription Management เพื่อสราง Subscription
Manager คืนไปที่ Notification sink โดย Subscription Manager จะมีหนาที่ในการจัดการรับขาวหรือเหตุการณที่
เกิดขึ้นจาก Notification source และเมื่อไหรก็ตามที่มีเหตุการณที่มีผูสนใจเกิดขึ้น ฝง Notification source จะทํา
การแจงขาวกลับไปที่ Notification sink
19
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
บทที่ 4 การพัฒนา Grid service
สําหรับหัวขอยอยในบทนี้ เราจะเริ่มตนดวยการอธิบายถึงขั้นตอนเบื้องตนในการเขียนโปรแกรมใหเปน
Grid service ตอจากนั้นเราจะกลาวถึงการ deploy เอา Grid service ไปติดตั้งที่ container โดยเราเนนวิธีการลงมือ
ปฏิบัติจริงเปนหลัก โดยเราจะยกตัวอยาง Grid service ที่มีชื่อวา Math Service ที่ใหบริการ operation ที่ชื่อ add ซึง่
เปนฟงกชันเหมือนกับ counter ที่ทําหนาที่ในการสะสมคา อยางไรก็ตาม ในบทนี้เราจะไมกลาวถึงวิธีการติดตั้งชุด
โปรแกรมพื้นฐานสําหรับการพัฒนาโปรแกรมไวในบทนี้ ซึ่งทานผูอานสามารถเขาไปดูเนื้อหาเหลานี้ไดใน
Appendix สําหรับหัวขอยอยสุดทายที่เราจะกลาวถึงคือการรัน Math service ที่ได deploy แลว และการเรียก
โปรแกรมฝง client ใหไปใชบริการ Math service
package com.hpcnc.gridservice.math;
20
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
เราใหชื่อ interface ของ Grid service คือ Math โดย Math มี operation ชื่อ add ซึ่งเราตั้งใจวาจะใหผูใชบริการนี้ใส
parameter มาหนึ่งตัว (ผาน in0) แลวคาที่ใสเขาไปจะไปรวมกับคาเดิมของ Math อีกทีหนึ่ง ซึ่งทานผูอานจะเห็น
ภาพชัดเจนยิ่งขึ้นใน 4.1.5
ขอยกตัวอยาง จากการสราง WSDL โดยใช Java2WSDL โดยอางอิงตาม interface ที่ชื่อ Math ของเรา
21
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
4.1.3 ตกแตง WSDL ใหเปน GSDL
ขั้นตอนนี้เปนการสรางไฟล GSDL (Grid WSDL) โดยไฟลนี้เกิดจากการนํา WSDL ที่ไดจาก 4.1.2 มา
แกไข ซึ่งเราอาจจะแกไขดวยตัวเอง แตวา Globus Toolkit 3 ไดจัดเตรียมคลาสชวยเหลือที่ชื่อ DecorateWSDL ซึ่ง
คลาสนี้มีกลไกงายๆคือ คลาสนี้จะดึงเอา schema จากไฟลที่ชื่อ ogsi_bindings.wsdl มาแทรกไวในไฟล WSDL
นั่นเอง
โดย Globus Toolkit 3 ไดจัดเตรียมคลาสที่ชื่อ GSDL2Java สําหรับสราง stubs จาก GSDL ซึ่งวิธีการใช
GSDL2Java มีรูปแบบดังนี้
22
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
หลังจากเรียกคําสั่งนี้แลว จะไดกลุมของคลาส stubs ซึ่งเก็บใน com.hpcnc.gridservice.math.stubs ซึ่งที่อยูนี้เปนที่
อยูที่เราไดระบุไวตอนสราง WSDL ในหัวขอ 4.1.2 ในสวนของ option -n โดย source code ของคลาส stubs ที่
เกิดขึ้นนั้น มีดังนี้
MathGridLocator.java
Math.java
MathLocator.java
MathPortType.java
MathSoapBindingStub.java
ซึ่ง คลาสทั้ ง 5 ที่เ กิ ด ขึ้ นนี้ คลาสที่ เ ราได ใ ชจ ริ ง ๆในตอนเขี ย นโปรแกรมมี เ พีย ง 2 คลาสเท านั้ น คื อ
MathGridLocator และ MathPortType โดยโปรแกรมฝง client เรียกใช MathGridLocator มีหนาที่ในการดึงเอา
reference ของ instance ของ Grid service มาใชงาน สวน MathPortType เปนคลาสที่เกิดในขั้นตอนที่เราสราง
WSDL (ดูจาก 4.1.2 ตรง option -P) ซึ่งโปรแกรมฝง client จะใชคลาสMathPortType เพื่อรับ reference ที่ไดจาก
MathGridLocator
package com.hpcnc.gridservice.math.stubs;
import java.rmi.RemoteException;
import org.globus.ogsa.impl.ogsi.GridServiceImpl;
public MathImpl() {
super();
}
23
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
package com.hpcnc.gridservice.math.client;
import java.net.URL;
import org.globus.ogsa.utils.GridServiceFactory;
import org.globus.ogsa.wsdl.GSR;
import org.gridforum.ogsi.Factory;
import org.gridforum.ogsi.GridService;
import org.gridforum.ogsi.LocatorType;
import org.gridforum.ogsi.OGSIServiceGridLocator;
import com.hpcnc.gridservice.math.stubs.MathPortType;
import com.hpcnc.gridservice.math.stubs.MathGridLocator;
24
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
OGSIServiceGridLocator gl = new OGSIServiceGridLocator();
Factory factory = gl.getFactoryPort(GSH);
GridServiceFactory gfact = new GridServiceFactory(factory);
LocatorType lt = gfact.createService();
System.out.println(mathPort.add(10));
System.out.println(mathPort.add(-3));
หลังจากได reference ของ Factory แลว เราก็ให Factory สราง instance ของ Math service โดยสิ่งที่คืนมาจากการ
สราง Math service ก็คือที่อยูของ Math service ซึ่งอยูในรูปแบบของ LocatorType
LocatorType lt = gfact.createService();
คลาส MathGridLocator ใชสําหรับดึงคา reference ของ instance ของ Math service โดย MathGridLocator จะมี
method ที่ชื่อ getMath ที่ใชสําหรับดึงคา reference ของ MathPortType (ซึ่งก็คือ reference ของ instance ของ
Math service นั่นเอง) โดยการสงคา LocatorType ที่ไดรับมาจากโคดกอนหนานี้
MathGridLocator mathLocator = new MathGridLocator();
25
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
MathPortType mathPort = mathLocator.getMath(lt);
4.1.7 โครงสรางของไฟลที่ไดจากการเขียนโปรแกรม
+---com
| \---hpcnc
| +---gridservice
| | \---math
| | | Math.class
| | | Math.java
| | |
| | +---client
| | | MathClient.class
| | | MathClient.java
| | |
| | \---stubs
| | Math.class
| | Math.java
| | MathGridLocator.class
| | MathGridLocator.java
| | MathImpl.class
| | MathImpl.java
| | MathLocator.class
| | MathLocator.java
| | MathPortType.class
| | MathPortType.java
| | MathSoapBindingStub.class
| | MathSoapBindingStub.java
| | _add.class
| | _add.java
| | _addResponse.class
| | _addResponse.java
26
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
| |
+---org
| \---gridforum
| \---ogsi
| _add.class
| _add.java
| _addResponse.class
| _addResponse.java
| _createService.class
| _createService.java
| _createServiceResponse.class
| _createServiceResponse.java
| _deliverNotification.class
| _deliverNotification.java
| _destroy.class
| _destroy.java
| _destroyResponse.class
| _destroyResponse.java
| _findByHandle.class
| _findByHandle.java
| _findByHandleResponse.class
| _findByHandleResponse.java
| _findServiceData.class
| _findServiceData.java
| _findServiceDataResponse.class
| _findServiceDataResponse.java
| _remove.class
| _remove.java
| _removeResponse.class
| _removeResponse.java
| _requestTerminationAfter.class
| _requestTerminationAfter.java
| _requestTerminationAfterResponse.class
| _requestTerminationAfterResponse.java
| _requestTerminationBefore.class
| _requestTerminationBefore.java
27
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
| _requestTerminationBeforeResponse.class
| _requestTerminationBeforeResponse.java
| _setServiceData.class
| _setServiceData.java
| _setServiceDataResponse.class
| _setServiceDataResponse.java
| _subscribe.class
| _subscribe.java
| _subscribeResponse.class
| _subscribeResponse.java
|
+---schema
| | ogsi.wsdl
| | ogsi_bindings.wsdl
| |
| \---math
| | math.wsdl
| |
| \---schema
| ogsi.wsdl
| ogsi_bindings.wsdl
จากโครงสรางที่ไดแสดงใหดู ทานอาจสังเกตไดวามีคลาสอยูหลายตัวทีเดียวที่เกิดในระหวางการเขียนโปรแกรม
อาธิเชน คลาสที่อยูใน package ชื่อ org.gridforum.ogsi เปนตน โดยคลาสเหลานี้เกิดขึ้นมาในระหวางขั้นตอนการ
ทํา GSDL2Java โดยเปนคลาสที่ทาง OGSI ไดกําหนดขึ้นมาสําหรับการพัฒนาโปรแกรมโดยภาษาจาวา
28
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
4.2 การ deploy เอา Grid service ไปยัง container
Container เปนไดจัดเตรียม runtime environment เพื่อให Grid service สามารถทํางานได โดย Globus
Toolkit 3 ไดจัดเตรียม container ที่ชื่อวา Catalina (ซึ่งพัฒนาโดย Apache Software Foundation) แตอยางไรก็ตาม
เราสามารถเลือก container ยี่หออื่นๆไดดวย ซึ่งเราจะไมลงรายละเอียดของการใช container รายอื่น
WSDD ยอมาจาก Web Service Deployment Description โดย WSDD เปนไฟล XML ที่อธิบายถึงรายละเอียดใน
การ deploy ตัว Grid service ขึ้นไปยัง container ซึ่ง WSDD สามารถถูกสรางไดโดยการใช editor ใดๆสรางขึ้นมา
โดยการอธิบายรายละเอียดของ WSDD จะมี parameter อยูหลายตัวดวยกัน ซึ่งเราไมจําเปนตองระบุ parameter
บางตัวลงไปในไฟล WSDD ก็ได ทั้งนี้ก็ขึ้นอยูกับวาเราตองการให Grid service ของเราใชความสามารถใดของ
Grid service บาง (เชน ตองการมี Notification หรือไม หรือตองการระบุ Service data element หรือเปลา เปนตน)
แตในที่นี้ เราจะกลาวถึงการระบุ parameter พื้นฐานของ Grid service เทานั้น
WSDD สําหรับการ deploy Grid service มีอยู 2 ชนิด คือ WSDD สําหรับการ deploy Grid service ซึ่ง
เปนWSDD และ WSDD สําหรับการ undeploy Grid service สําหรับ WSDD สําหรับการ undeploy จะอธิบายถึง
การถอดถอนเอา Grid service ออกมาจาก container
<?xml version="1.0"?>
<deployment name="defaultServerConfig" xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
29
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
</deployment>
30
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
Parameter ตอมาคือ “name” เปนตัวที่ใชในการระบุถึงชื่อของ Factory ของ Grid service ซึ่งในที่นี้เราระบุคาเปน
Math Factory
<parameter name="name" value="Math Factory"/>
Parameter “instance-name” เปนตัวใชบอก instance ของ Grid service ซึ่งเราระบุเปน “Math Instance”
<parameter name="instance-name" value="Math Instance"/>
สําหรับ WSDD ในการ undeploy หรือ server-undeploy.wsdd ของ Math service สามารถเขียนไดดังนี้
31
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
คําสั่งแรกคือ การสราง JAR file ของ stubs และคลาสการทํางานของ Math service เราตั้งชื่อ JAR file
ไววา math.jar
ant startContainer
32
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
ant stopContainer
./globus_start_container.sh
./globus_stop_container.sh
http://127.0.0.1:8080/ogsa/services/core/admin/AdminService
http://127.0.0.1:8080/ogsa/services/core/management/OgsiManagementService
http://127.0.0.1:8080/ogsa/services/core/registry/ContainerRegistryService
http://127.0.0.1:8080/ogsa/services/core/jmsadapter/JMSAdapterFactoryService
http://127.0.0.1:8080/ogsa/services/core/logging/OgsiLoggingManagementService
http://127.0.0.1:8080/ogsa/services/core/notification/httpg/NotificationSubscriptionFactoryService
http://127.0.0.1:8080/ogsa/services/core/ping/PingService
http://127.0.0.1:8080/ogsa/services/Math/MathFactory
http://127.0.0.1:8080/ogsa/services/samples/registry/VORegistryService
http://127.0.0.1:8080/ogsa/services/samples/counter/notification/CounterService
http://127.0.0.1:8080/ogsa/services/samples/counter/notification/CounterFactoryService
http://127.0.0.1:8080/ogsa/services/samples/counter/encoded/CounterFactoryService
….
33
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
โดยผลลัพธจากการรัน container แลว ถาหากวา Math service ได deploy ขึ้นไปบน container สําเร็จ ควรจะมี
รายชื่อ Math service ปรากฏขึ้นมาในขอความดวย ดังที่บรรทัดที่เปนตัวหนาไดแสดงไว
java com.hpcnc.gridservice.math.client.MathClient
ผลลัพธที่ไดควรเปนดังนี้
10
7
10
-3
34
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
Appendix: การติดตั้งสภาพแวดลอมสําหรับพัฒนา Grid service
ติดตั้งบนระบบปฏิบัติการ Linux
# . /etc/profile
35
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
# mkdir apache-ant
# cd apache-ant
# tar –xzvf /apache/apache-ant-1.6.2-bin.tar.gz
apache-ant-1.6.2/bin/ant
apache-ant-1.6.2/bin/runant.pl
apache-ant-1.6.2/bin/antRun
apache-ant-1.6.2/bin/runant.py
apache-ant-1.6.2/bin/antRun.pl
apache-ant-1.6.2/bin/complete-ant-cmd.pl
apache-ant-1.6.2/
apache-ant-1.6.2/bin/
apache-ant-1.6.2/lib/
apache-ant-1.6.2/etc/log.xsl
apache-ant-1.6.2/LICENSE.xerces
apache-ant-1.6.2/KEYS
apache-ant-1.6.2/LICENSE.sax
apache-ant-1.6.2/LICENSE.dom
apache-ant-1.6.2/WHATSNEW
apache-ant-1.6.2/welcome.html
apache-ant-1.6.2/LICENSE
apache-ant-1.6.2/README
36
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
export ANT_HOME
export JAVA_HOME
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
…(author omits lines)
# . /etc/profile
Buildfile: build.xml
setenv:
[echo] Build environment for OGSA
[echo] Flags (Note: If the {property name} is displayed,
[echo] then the component is not present)
[echo] Property values
[echo] debug=true
[echo] deprecation=true
37
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
[copy] Copying 1 file to /home/globus/core-src/impl/java/build/ogsa-3.2
[copy] Copying 1 file to /home/globus/core-src/impl/java/build/ogsa-3.2
distJavaDoc:
[mkdir] Created dir: /home/globus/core-src/impl/java/build/ogsa-3.2/docs/api
[copy] Copying 1525 files to /home/globus/core-src/impl/java/build/ogsa3.2/docs/api
dist:
BUILD SUCCESSFUL
Total time: 7 minutes 18 seconds
• จากนั้นใหเรา Set Globus location โดยที่แกที่ /etc/profile หรือ .bashrc ดั งนี้
ล็อกอินเปน root แลวใช command ตอไปนี้
# vi /etc/profile
if [ -z “$INPUTRC” –a ! –f “$HOME/.inputrc”]; then
INPUTRC=/etc/inputrc
fi
GLOBUS_LOCATION = /home/globus/core-scr/impl/java/build/ogsa-3.2
ANT_HOME= /usr/local/apache-ant/ant1.6.1
JAVA_HOME = /usr/local/sun-/java/j2sdk1.4.2_02
PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
Export GLOBUS_LOCATION
export ANT_HOME
export JAVA_HOME
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
…(author omits lines)
# . /etc/profile
Buildfile: build.xml
launchers:
generateLaunchers:
[echo] generating launcher scripts
38
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ
Copyright 2003 © High Performance Computing and Networking Center, Thailand
setAbsoluteGlobusLocation:
setClasspathScriptPath:
generateLauncher:
[echo] Creating launcher script globus-service-browser
testUnix:
generateUnix:
[copy] Copying 1 file to /home/g4765412/globus/core-src/impl/java/bin
…(author omits lines)
setAbsoluteGlobusLocation:
setClasspathScriptPath:
generateLauncher:
[echo] Creating launcher script ogsa-edit-wsdd
testUnix:
generateUnix:
[copy] Copying 1 file to /home/g4765412/globus/core-src/impl/java/bin
testWindows:
generateWindows:
testWindows:
generateCoGLaunchersWindows:
setup:
BUILD SUCCESSFUL
Total time: 7 seconds
39