จัดการการพึ่งพากระบวนการและบริการในสภาพแวดล้อม SOA
ความเป็นมา คุณรู้หรือไม่ว่ากระบวนการ BPEL ขึ้นอยู่กับบริการใดบ้าง หากใช้กระบวนการ BPEL เวอร์ชันที่แตกต่างกัน การขึ้นต่อกันระหว่างทั้งสองอาจมีความซับซ้อนมากขึ้นอย่างรวดเร็ว ความซับซ้อนของการจัดการการพึ่งพาจะเพิ่มขึ้นหากเราคำนึงถึงบริการ Enterprise Service Bus (ESB) ที่เรียกใช้โดยกระบวนการ BPEL ความซับซ้อนทำให้การปรับใช้และการทดสอบใช้เวลานาน ยาก และเกิดข้อผิดพลาดได้ง่าย
บ่อยครั้งที่เราใช้เครื่องมือสร้างแบบจำลอง Microsoft Visio เพื่อสร้างไดอะแกรมการขึ้นต่อกันด้วยตนเอง และช่วงชิงเพื่ออัปเดตการขึ้นต่อกันหลังจากการเปลี่ยนแปลงทุกครั้งในกระบวนการ นี่เป็นอุปสรรคสำคัญต่อความคล่องตัวของโครงสร้างพื้นฐานสถาปัตยกรรมเชิงบริการ (SOA) ซึ่งได้รับการออกแบบมาเพื่อทำให้เกิดการเปลี่ยนแปลงกระบวนการทางธุรกิจที่คล่องตัว
ในบันทึกทางเทคนิคนี้ คุณจะได้เรียนรู้วิธีปรับปรุงกระบวนการสร้างของคุณให้ประสบความสำเร็จ และนำการสร้างกราฟการขึ้นต่อกันของกระบวนการไปใช้โดยอัตโนมัติ
ความท้าทายของเราคือการปรับใช้โปรเจ็กต์สาธิต Oracle SOA Suite สำหรับลูกค้าที่มีกระบวนการ BPEL จำนวนมาก และอ้างอิงถึงกระบวนการย่อย BPEL และบริการ ESB จำนวนมาก เราลงเอยด้วยการใช้กระบวนการ BPEL และบริการ ESB มากมาย (ซึ่งถูกกำหนดให้เป็นบริการสาธารณะและแบ่งปันในทะเบียนบริการ) รวมถึงกระบวนการ BPEL และบริการ ESB ที่เป็นกรรมสิทธิ์อื่นๆ
อันดับแรก เราตัดสินใจสร้างการปรับใช้แบบ Ant สำหรับบริการทั้งหมดของโปรเจ็กต์ ปรับใช้กระบวนการ BPEL (รวมถึงกรณีทดสอบที่ดำเนินการ) กับสภาพแวดล้อมที่แตกต่างกัน (การทดสอบ การรวม การผลิต) และยังปรับใช้บริการ ESB เพื่อ สภาพแวดล้อมเหล่านี้ที่ใช้ Ant ดาวน์โหลด e-book คอมพิวเตอร์ฟรี
ข้อกำหนด หลังจากเสร็จสิ้นการเปิดตัวโครงการแรก เรามีข้อกำหนดบางประการ:
-
เมื่อกระบวนการ BPEL หรือบริการ ESB เปลี่ยนแปลง เราไม่ต้องการปรับใช้บริการทั้งหมดของโครงการ ดังนั้นเราจึงจำเป็นต้องย้ายจากการปรับใช้ที่เน้นโครงการเป็นศูนย์กลาง ไปเป็นแนวทางการปรับใช้ที่เน้นบริการสาธารณะเป็นหลัก
เมื่อปรับใช้กระบวนการ BPEL กระบวนการย่อยที่ขึ้นต่อกัน (กรรมสิทธิ์) และบริการ ESB ทั้งหมดจะถูกปรับใช้โดยอัตโนมัติเช่นกัน
เพื่อป้องกันการเขียนทับเวอร์ชันเฉพาะของกระบวนการ ให้ปรับใช้เวอร์ชันของกระบวนการนั้นเฉพาะเมื่อยังไม่ได้ปรับใช้บนเซิร์ฟเวอร์ การเขียนทับจะทำให้ข้อมูลโฟลว์อินสแตนซ์ทั้งหมดสูญหาย
กราฟภาพของการพึ่งพากระบวนการและบริการทั้งหมดควรถูกสร้างขึ้นโดยอัตโนมัติในระหว่างการปรับใช้โดยไม่จำเป็นต้องรักษาข้อมูลนี้แยกต่างหาก การแสดงภาพควรมีลักษณะเช่นนี้
คำถามเปิด เพื่อตอบสนองต่อข้อกำหนดใหม่เหล่านี้ เราถามคำถามต่อไปนี้และให้คำตอบต่อไปนี้:
คำถาม: ข้อมูลจากการขึ้นต่อกันของกระบวนการและบริการถูกเก็บไว้ที่ไหน? ต้องการเพิ่มข้อมูลเพิ่มเติมเพื่อสร้างกราฟการพึ่งพาที่สมบูรณ์หรือไม่
คำตอบ: บริการทั้งหมดที่เรียกใช้โดยกระบวนการ BPEL จะถูกจัดเก็บไว้ในไฟล์ bpel.xml ที่ทำเครื่องหมายโดย PartnerLinkBinding กระบวนการ BPEL และข้อมูลเวอร์ชันที่ถูกเรียกนั้นจะถูกเข้ารหัสลงใน URL ด้วย ตัวอย่างเช่น: ดาวน์โหลดฟรี e-book สำหรับคอมพิวเตอร์
<ชื่อคุณสมบัติ="wsdlRuntimeLocation">
${domain_url}/CustomerAccount_BES/1.3/CustomerAccount_BES?wsdl
</คุณสมบัติ>
เวอร์ชันปัจจุบันของกระบวนการ BPEL ที่จะปรับใช้สามารถพบได้ในไฟล์ build.properties สำหรับการบำรุงรักษาเวอร์ชันของกระบวนการ BPEL เราจำเป็นต้องเปลี่ยนคุณสมบัติ rev ในไฟล์ build.properties เท่านั้น
เพื่อแยกความแตกต่างระหว่างกระบวนการ BPEL สาธารณะและส่วนตัว ลิงก์พันธมิตรของลูกค้าภายในไฟล์ bpel.xml ให้แอตทริบิวต์ใหม่ "ประเภท" ที่มีค่าเป็น "สาธารณะ" หรือ "ส่วนตัว" ดังที่แสดงไว้ที่นี่:
<partnerLinkBinding name="ลูกค้า">
<property name="wsdlLocation">CustomerAccount_BES.wsdl</property>
<ชื่อคุณสมบัติ="ประเภท">สาธารณะ</คุณสมบัติ>
</partnerLinkBinding>
คำถาม: มีเครื่องมือหรือเฟรมเวิร์กที่สามารถสร้างกราฟการพึ่งพาแบบไดนามิกได้หรือไม่?
คำตอบ: ใช่ Graphviz ( www.graphviz.org ) ซึ่งเป็นเครื่องมือโอเพ่นซอร์ส สามารถสร้างกราฟจากไฟล์อินพุตในรูปแบบข้อความได้
คำถาม: มีตัวเลือกอะไรบ้างในการอ้างอิงกระบวนการ BPEL อื่นๆ
คำตอบ: ทางเลือกคือ:
อ้างอิงเวอร์ชันเริ่มต้น อ้างอิงเวอร์ชันเฉพาะ อ้างอิงรหัสบริการ UDDI (มีหรือไม่มีข้อมูลเวอร์ชันที่เข้ารหัส)
คำถาม: ข้อกำหนดการปรับใช้งานใหม่ทั้งหมดนี้สามารถนำไปใช้ได้อย่างไร
คำตอบ: ข้อกำหนดการปรับใช้ใหม่เหล่านี้ทำได้ดีที่สุดโดยใช้งาน Ant แบบกำหนดเอง
เมื่อคำถามเริ่มต้นได้รับคำตอบอย่างน่าพอใจ เรามาเริ่มด้วยการสร้างงาน Ant แบบกำหนดเองกันดีกว่า ไฟล์ bpel.xml ถูกแยกวิเคราะห์ในงาน Ant สำหรับแท็ก PartnerLinkBindings ทั้งหมดที่พบ การแยกวิเคราะห์ไฟล์ bpel.xml ที่เกี่ยวข้องจะเริ่มต้นแบบวนซ้ำ นอกเหนือจากการแยกวิเคราะห์แล้ว ค่าปัจจุบันของคุณสมบัติเวอร์ชัน ("อ้างอิง") จะถูกแยกออกจากไฟล์ build.properties ของแต่ละโปรเจ็กต์ BPEL ที่พบ หนึ่งในความท้าทายของการแยกวิเคราะห์แบบเรียกซ้ำคือการข้ามการขึ้นต่อกันแบบวนรอบ
แอตทริบิวต์ "ประเภท" ใหม่ของเราและการแยกวิเคราะห์แบบเรียกซ้ำในไฟล์ bpel.xml ตอบสนองความต้องการทั้งหมดของเราสำหรับการปรับใช้โดยคำนึงถึงบริการ
ยิ่งไปกว่านั้น เราใช้ Graphviz เพื่อแก้ปัญหาการสร้างกราฟการขึ้นต่อกันแบบอัตโนมัติ เพื่อให้บรรลุเป้าหมายนี้ เราจะรวมการอ้างอิงทั้งหมดที่ได้รับจากการแยกวิเคราะห์ bpel.xml แบบเรียกซ้ำเป็นไฟล์ XML เดียวดังที่แสดงด้านล่าง ดาวน์โหลด e-book คอมพิวเตอร์ฟรี
<?xml version="1.0" encoding="UTF-8"?>
<BPELกระเป๋าเดินทาง>
<BPELProcess id="Resource_BAS_SetForAccount" src=" http://www.oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BAS_SetForAccount.bpel ">
<partnerLinkBindings>
<partnerLinkBinding name="ลูกค้า">
<property name="wsdlLocation">Resource_BAS_SetForAccount.wsdl</property>
<ชื่อคุณสมบัติ="ประเภท">สาธารณะ</คุณสมบัติ>
<ชื่อคุณสมบัติ="รุ่น">1.2</คุณสมบัติ>
</partnerLinkBinding>
<partnerLinkBinding name="RemoveFromAccount">
<property name="wsdlLocation">Resource_BAS_RemoveFromAccount.wsdl</property>
<ชื่อคุณสมบัติ="รุ่น">1.5</คุณสมบัติ>
</partnerLinkBinding>
-
</partnerLinkBindings>
</กระบวนการ BPEL>
<BPELProcess id="Resource_BAS_RemoveFromAccount" src=" http://www.oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BAS_RemoveFromAccount.bpel ">
<partnerLinkBindings>
<partnerLinkBinding name="ลูกค้า">
<property name="wsdlLocation">Resource_BAS_RemoveFromAccount.wsdl</property>
<ชื่อคุณสมบัติ="ประเภท">สาธารณะ</คุณสมบัติ>
<ชื่อคุณสมบัติ="รุ่น">1.5</คุณสมบัติ>
</partnerLinkBinding>
<partnerLinkBinding name="CheckAvailability">
<property name="wsdlLocation">Resource_BES_CheckAvailability.wsdl</property>
<ชื่อคุณสมบัติ="รุ่น">1.1</คุณสมบัติ>
</partnerLinkBinding>
-
</partnerLinkBindings>
</กระบวนการ BPEL>
<BPELProcess id="Resource_BES_CheckAvailability" src=" http://www.oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BES_CheckAvailability.bpel ">
<partnerLinkBindings>
<partnerLinkBinding name="ลูกค้า">
<property name="wsdlLocation">Resource_BES_CheckAvailability.wsdl</property>
<ชื่อคุณสมบัติ="ประเภท">สาธารณะ</คุณสมบัติ>
<ชื่อคุณสมบัติ="รุ่น">1.1</คุณสมบัติ>
</partnerLinkBinding>
-
</partnerLinkBindings>
</กระบวนการ BPEL>
-
</BPELกระเป๋าเดินทาง>
ใช้ XSLT เพื่อแปลงไฟล์ XML ที่ผสานเป็นรูปแบบเป้าหมาย (.dot) ซึ่งสามารถใช้เป็นอินพุตไปยังตัวสร้าง Graphviz เพื่อสร้างรูปภาพ PNG ดังที่แสดงด้านล่าง:
โครงสร้าง digraph {
โหนด [รูปร่าง=บันทึก,fontname="Arial",fontsize="10"];
ขอบ [fontname="Arial",fontsize="8"];
อันดับเดอร์=LR;
labeljust=l;
"Resource_BAS_SetForAccount_1_2" [shape=record,label="{Resource_BAS_SetForAccount}|{1.2|public}",
fillcolor=เหลืองเขียว,สไตล์=เติม];
"Resource_BAS_RemoveFromAccount_1_5" [shape=record,label="{Resource_BAS_RemoveFromAccount}|{1.5|public}",
fillcolor=เหลืองเขียว,สไตล์=เติม];
"Resource_BES_CheckAvailability_1_1" [shape=record,label="{Resource_BES_CheckAvailability}|{1.1|public}",
fillcolor=เหลืองเขียว,สไตล์=เติม];
"Resource_BAS_SetForAccount_1_2" -> "Resource_BAS_RemoveFromAccount_1_5" [ตกแต่ง=true,ฉลาก=""];
"Resource_BAS_RemoveFromAccount_1_5" -> "Resource_BES_CheckAvailability_1_1" [ตกแต่ง=true,ฉลาก=""];
-
กราฟการพึ่งพาที่สร้างโดยไฟล์ DOT ด้านบนมีลักษณะดังนี้:
ชื่อบริการ เวอร์ชัน และประเภทจะแสดงในกล่อง สีของกล่องระบุประเภทบริการ ในแผนภาพนี้ เรามีบริการสาธารณะ (สีเขียว) สามบริการ แผนภาพที่จุดเริ่มต้นของบทความนี้ยังแสดงบริการ ESB (สีขาว) และบริการ BPEL (สีส้ม)
หลังจากสร้างไดอะแกรมในอุดมคติสำหรับกระบวนการ BPEL สาธารณะแต่ละกระบวนการแล้ว เราจำเป็นต้องปรับใช้กระบวนการที่เกี่ยวข้องโดยอัตโนมัติ สำหรับการปรับใช้โดยเน้นการบริการเป็นหลัก เราใช้รายการกระบวนการที่เราสร้างไว้ก่อนหน้านี้ เป้าหมายการปรับใช้มาตรฐานถูกเรียกสำหรับแต่ละกระบวนการในรายการ เพื่อป้องกันการเขียนทับเวอร์ชันกระบวนการที่มีอยู่บนเซิร์ฟเวอร์ เป้าหมายการปรับใช้จะถูกเรียกก็ต่อเมื่อไม่มีกระบวนการเวอร์ชันปัจจุบันบนเซิร์ฟเวอร์
คุณสามารถตรวจสอบว่าเวอร์ชันกระบวนการเฉพาะพร้อมใช้งานหรือไม่โดยการเปิดการเชื่อมต่อ HTTP ไปยัง URL WSDL ของกระบวนการ จากนั้นตรวจสอบรหัสสถานะที่ส่งคืน (สถานะ HTTP 200 ? ปรับใช้แล้ว สถานะ HTTP 404 ? ยังไม่ได้ปรับใช้) ดาวน์โหลด e-book คอมพิวเตอร์ฟรี
ผลลัพธ์ของงาน Ant แบบกำหนดเองของเรา (ประกอบด้วยการแยกวิเคราะห์แบบเรียกซ้ำ) การสร้างภาพ PNG และการปรับใช้ที่เน้นบริการเป็นศูนย์กลางมีลักษณะดังนี้:
-
[mkdir] สร้าง dir: /MyProject/Resource_BAS_SetForAccount/doc
[bpeltask] ** การเริ่มต้นปรับใช้ด้วย DependencesTask **
[bpeltask] Resource_BAS_SetForAccount-1.2
[bpeltask] ** พารามิเตอร์ **
[bpeltask] ชื่อไฟล์ dot: doc/bpel-recursiv-all.dot
[bpeltask] dotfilenamepublic: doc/bpel-recursiv-public.dot
[bpeltask] กำหนดเป้าหมายการปรับใช้: ปรับใช้
การปรับใช้ [bpeltask]: จริง
[bpeltask] เขียนทับ: เท็จ
[bpeltask] หยุดใช้งานแล้ว: เท็จ
[bpeltask] ** การแก้ไขไฟล์ bpel.xml ทั้งหมดซ้ำ ๆ **
[bpeltask] [Resource_BAS_SetForAccount-1.2]
[bpeltask] [Resource_BAS_SetForAccount-1.2, Resource_BAS_RemoveFromAccount-1.5]
[bpeltask] [Resource_BAS_SetForAccount-1.2, Resource_BAS_RemoveFromAccount-1.5, Resource_BES_CheckAvailability-1.1]
[bpeltask] ** กำลังเขียนไฟล์ bpel.xml กลาง **
[bpeltask] ** การแปลงไฟล์ DOT **
[bpeltask] ** การปรับใช้บริการ **
[ภารกิจ] =============================================== =========================
[bpeltask] บริการเปิดใช้งานแล้ว (HTTP/1.1 200 ตกลง) 'Resource_BES_CheckAvailability' ในเวอร์ชัน '1.1' http://localhost:8888/orabpel/default/Resource_BES_CheckAvailability/1.1/ Resource_BES_CheckAvailability?wsdl
[ภารกิจ] =============================================== =========================
[ภารกิจ] =============================================== =========================
[bpeltask] บริการเปิดใช้งานแล้ว (HTTP/1.1 200 ตกลง) 'Resource_BAS_RemoveFromAccount' ในเวอร์ชัน '1.5' http://localhost:8888/orabpel/default/Resource_BAS_RemoveFromAccount/1.5 / Resource_BAS_RemoveFromAccount?wsdl
[ภารกิจ] =============================================== =========================
[ภารกิจ] =============================================== =========================
[bpeltask] บริการยังไม่ได้ปรับใช้ (ไม่พบ HTTP/1.1 404) http://localhost:8888/orabpel/default/Resource_BAS_SetForAccount/1.2/ Resource_BAS_SetForAccount?wsdl
[bpeltask] การเริ่มต้นใช้งานบริการของ Resource_BAS_SetForAccount ในเวอร์ชัน 1.2
[ภารกิจ] =============================================== =========================
-
การใช้งานที่เน้นบริการเป็นศูนย์กลางซึ่งสร้างกราฟการพึ่งพาโดยอัตโนมัติ ตรงตามความต้องการทั้งหมดของเราในด้านความโปร่งใสของโครงสร้างพื้นฐาน SOA เนื่องจากการปรับใช้นั้นขึ้นอยู่กับ Ant ทั้งหมด เราจึงสามารถใช้มันสำหรับ Luntbuild ของเราทุกคืนและงานสร้างการผลิต (สภาพแวดล้อมการสร้างต่อเนื่อง)
เพื่อสนับสนุนการกำกับดูแล SOA ของลูกค้าของเรา เราจะเปิดเผยกระบวนการสาธารณะและเอกสารประกอบของกระบวนการ พร้อมด้วยกราฟการพึ่งพาผลลัพธ์ในวิกิของลูกค้า ดังที่แสดงไว้ที่นี่:
หน้า Wiki จะถูกสร้างขึ้นแบบไดนามิกเมื่อการค้นหาในรีจิสทรีบริการดึงข้อมูลเวอร์ชันของบริการสาธารณะที่ลงทะเบียนในปัจจุบัน รูปภาพในหน้าวิกิมีลิงก์ไปยังแหล่งเก็บข้อมูลต้นทาง (การโค่นล้ม) ซึ่งประกอบด้วยเอกสารขนาดจริงและบริการสาธารณะของเราในเวอร์ชันที่ลงทะเบียนไว้ คลิกที่ภาพขนาดย่อเพื่อดึงไฟล์ที่เกี่ยวข้องจาก Subversion ผ่าน WebDAV