إدارة تبعيات العملية والخدمة في بيئة SOA
الخلفية هل تعرف ما هي الخدمات التي تعتمد عليها عملية BPEL؟ إذا تم استخدام إصدارات مختلفة من عملية BPEL، فإن التبعيات بين الاثنين يمكن أن تصبح أكثر تعقيدًا بسرعة. يزداد تعقيد إدارة التبعية إذا أخذنا في الاعتبار خدمات ناقل خدمة المؤسسة (ESB) التي تستدعيها عملية BPEL. يجعل التعقيد عملية النشر والاختبار تستغرق وقتًا طويلاً وصعبة وعرضة للخطأ.
غالبًا ما ينتهي بنا الأمر إلى استخدام أداة نمذجة Microsoft Visio لرسم مخططات للتبعيات يدويًا والاندفاع لتحديث التبعيات بعد كل تغيير في العملية. يعد هذا عائقًا كبيرًا أمام سرعة البنى التحتية للبنية الموجهة نحو الخدمة (SOA)، والتي تم تصميمها لتمكين التغييرات السريعة في العمليات التجارية.
في هذه المذكرة الفنية، ستتعلم كيفية تحسين عملية الإنشاء بنجاح وتنفيذ الإنشاء التلقائي للرسوم البيانية لتبعية العملية.
يتمثل التحدي الذي نواجهه في تنفيذ مشروع توضيحي لـ Oracle SOA Suite لعميل يحتوي على العديد من عمليات BPEL ويشير إلى العديد من عمليات BPEL الفرعية وخدمات ESB. انتهى بنا الأمر إلى استخدام عشرات من عمليات BPEL وخدمات ESB (والتي تم تعريفها على أنها خدمات عامة وتمت مشاركتها في سجل الخدمة) بالإضافة إلى عمليات BPEL الأخرى وخدمات ESB الخاصة.
أولاً، قررنا إنشاء نشر قائم على Ant لجميع خدمات المشروع، ونشر عمليات BPEL (بما في ذلك حالات الاختبار التي تنفذها) في بيئات مختلفة (الاختبار والتكامل والإنتاج)، وكذلك نشر خدمات ESB إلى النمل القائم على هذه البيئات. تحميل كتب الكترونية للكمبيوتر مجانا
المتطلبات بعد الانتهاء من الإصدار الأول للمشروع، لدينا بعض المتطلبات:
,
عندما تتغير عملية BPEL أو خدمة ESB، لا نرغب في نشر جميع خدمات المشروع. لذلك نحن بحاجة إلى الانتقال من النشر المرتكز على المشروع إلى نهج النشر المرتكز على الخدمة العامة.
عند نشر عملية BPEL، يتم أيضًا نشر جميع العمليات الفرعية التابعة (الملكية) وخدمات ESB تلقائيًا.
لمنع الكتابة فوق إصدار معين من العملية، فإن نشر هذا الإصدار من العملية فقط إذا لم يتم نشره بالفعل على الخادم سيؤدي إلى فقدان كافة معلومات تدفق المثيل.
يجب إنشاء رسم بياني مرئي لجميع تبعيات العملية والخدمة تلقائيًا أثناء النشر دون الحاجة إلى الاحتفاظ بهذه المعلومات بشكل منفصل. يجب أن يبدو التصور هكذا.
أسئلة مفتوحة استجابة لهذه المتطلبات الجديدة، طرحنا الأسئلة التالية وقدمنا الإجابات التالية:
سؤال: أين يتم تخزين المعلومات من تبعيات العملية والخدمة؟ هل تحتاج إلى إضافة المزيد من المعلومات لإنشاء رسم بياني كامل للتبعية؟
الإجابة: يتم تخزين كافة الخدمات التي يتم استدعاؤها بواسطة عملية BPEL في ملف bpel.xml الذي تم وضع علامة عليه بواسطة PartnerLinkBinding. يتم أيضًا تشفير عملية BPEL ومعلومات الإصدار المطلوبة في عنوان URL. على سبيل المثال: تنزيل مجاني للكتب الإلكترونية للكمبيوتر
<اسم الخاصية = "wsdlRuntimeLocation">
${domain_url}/CustomerAccount_BES/1.3/CustomerAccount_BES?wsdl
</خاصية>
يمكن العثور على الإصدار الحالي من عملية BPEL التي سيتم نشرها في ملف build.properties. لصيانة إصدار عملية BPEL، نحتاج فقط إلى تغيير خاصية rev في ملف build.properties.
للتمييز بين عمليات BPEL العامة والخاصة، يوفر رابط شريك العميل داخل ملف bpel.xml سمة جديدة "نوع" بقيمة "عام" أو "خاص"، كما هو موضح هنا:
<partnerLinkBinding name="client">
<property name="wsdlLocation">CustomerAccount_BES.wsdl</property>
<property name="type">عام</property>
</partnerLinkBinding>
سؤال: هل هناك أداة أو إطار عمل يمكنه إنشاء الرسوم البيانية التبعية ديناميكيًا؟
الإجابة: نعم، يمكن لـ Graphviz ( www.graphviz.org )، وهي أداة مفتوحة المصدر، إنشاء رسوم بيانية من ملفات الإدخال بتنسيق نصي.
سؤال: ما هي الخيارات المتاحة للإشارة إلى عمليات BPEL الأخرى؟
الجواب: الخيارات هي:
مرجع إلى الإصدار الافتراضي مرجع إلى إصدار محدد مرجع إلى مفتاح خدمة UDDI (مع أو بدون معلومات الإصدار المشفر)
سؤال: كيف يمكن تنفيذ كل متطلبات النشر الجديدة هذه؟
الإجابة: من الأفضل تحقيق متطلبات النشر الجديدة هذه باستخدام مهام Ant المخصصة.
مع الإجابة على أسئلة البدء بشكل مرضي، فلنبدأ بإنشاء مهمة Ant مخصصة. يتم تحليل ملف bpel.xml في مهمة Ant. بالنسبة لجميع علامات PartnerLinkBindings التي تم العثور عليها، سيبدأ تحليل ملف bpel.xml المقابل بشكل متكرر. بالإضافة إلى التحليل، يتم استخراج القيمة الحالية لخاصية الإصدار ("ref") من ملف build.properties لكل مشروع BPEL تم العثور عليه. أحد تحديات التحليل العودي هو تخطي التبعيات الدورية.
تعمل سمة "النوع" الجديدة والتحليل التكراري في ملف bpel.xml على تنفيذ جميع احتياجاتنا للنشر مع وضع الخدمة في الاعتبار.
والأفضل من ذلك أننا نستخدم Graphviz لحل مشكلة الإنشاء التلقائي للرسوم البيانية التبعية. ولتحقيق ذلك، سنقوم بدمج كافة التبعيات التي تم الحصول عليها من تحليل bpel.xml العودي في ملف XML واحد كما هو موضح أدناه. تحميل كتب الكترونية للكمبيوتر مجانا
<?xml version="1.0" encoding="UTF-8"?>
<BPELSuitcase>
<BPELProcess id="Resource_BAS_SetForAccount" src=" http://www.Oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BAS_SetForAccount.bpel ">
<partnerLinkBindings>
<partnerLinkBinding name="client">
<property name="wsdlLocation">Resource_BAS_SetForAccount.wsdl</property>
<property name="type">عام</property>
<property name="version">1.2</property>
</partnerLinkBinding>
<partnerLinkBinding name="RemoveFromAccount">
<property name="wsdlLocation">Resource_BAS_RemoveFromAccount.wsdl</property>
<property name="version">1.5</property>
</partnerLinkBinding>
...
</partnerLinkBindings>
</BPELProcess>
<BPELProcess id="Resource_BAS_RemoveFromAccount" src=" http://www.Oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BAS_RemoveFromAccount.bpel ">
<partnerLinkBindings>
<partnerLinkBinding name="client">
<property name="wsdlLocation">Resource_BAS_RemoveFromAccount.wsdl</property>
<property name="type">عام</property>
<property name="version">1.5</property>
</partnerLinkBinding>
<partnerLinkBinding name="CheckAvailability">
<property name="wsdlLocation">Resource_BES_CheckAvailability.wsdl</property>
<property name="version">1.1</property>
</partnerLinkBinding>
...
</partnerLinkBindings>
</BPELProcess>
<BPELProcess id="Resource_BES_CheckAvailability" src=" http://www.Oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BES_CheckAvailability.bpel ">
<partnerLinkBindings>
<partnerLinkBinding name="client">
<property name="wsdlLocation">Resource_BES_CheckAvailability.wsdl</property>
<property name="type">عام</property>
<property name="version">1.1</property>
</partnerLinkBinding>
...
</partnerLinkBindings>
</BPELProcess>
...
</BPELSuitcase>
استخدم XSLT لتحويل ملفات XML المدمجة إلى تنسيق مستهدف (.dot)، والذي يمكن استخدامه كمدخل لمولد Graphviz لإنشاء صورة PNG، كما هو موضح أدناه:
بنيات ديغراف {
العقدة [shape=record,fontname='Arial',fontsize='10'];
حافة [fontname = "Arial"، Fontsize = "8"]؛
rankdir=LR;
labeljust=l;
"Resource_BAS_SetForAccount_1_2" [shape=record,label="{Resource_BAS_SetForAccount}|{1.2|public}"،
fillcolor=yellowgreen,style=filled];
"Resource_BAS_RemoveFromAccount_1_5" [shape=record,label="{Resource_BAS_RemoveFromAccount}|{1.5|public}"،
fillcolor=yellowgreen,style=filled];
"Resource_BES_CheckAvailability_1_1" [shape=record,label="{Resource_BES_CheckAvailability}|{1.1|public}"،
fillcolor=yellowgreen,style=filled];
"Resource_BAS_SetForAccount_1_2" -> "Resource_BAS_RemoveFromAccount_1_5" [decorate=true,label=""];
"Resource_BAS_RemoveFromAccount_1_5" -> "Resource_BES_CheckAvailability_1_1" [decorate=true,label=""];
}
يبدو الرسم البياني للتبعية الذي تم إنشاؤه بواسطة ملف DOT أعلاه كما يلي:
يظهر في المربع اسم الخدمة وإصدارها ونوعها. يشير لون المربع إلى نوع الخدمة. في هذا المخطط لدينا ثلاث خدمات عامة (خضراء). يُظهر الرسم التخطيطي الموجود في بداية هذه المقالة أيضًا خدمة ESB (الأبيض) وخدمة BPEL (البرتقالية).
بعد إنشاء المخطط المثالي لكل عملية BPEL عامة، نحتاج إلى تنفيذ النشر التلقائي للعمليات ذات الصلة. بالنسبة لهذا النشر المرتكز على الخدمة، استخدمنا قائمة العمليات التي أنشأناها سابقًا. يتم استدعاء هدف النشر القياسي لكل عملية في القائمة. لمنع الكتابة فوق إصدارات العملية الموجودة على الخادم، يتم استدعاء هدف النشر فقط في حالة عدم وجود إصدار حالي من العملية على الخادم.
يمكنك تحديد ما إذا كان إصدار عملية محدد متاحًا عن طريق فتح اتصال HTTP إلى عنوان URL WSDL للعملية ثم التحقق من رمز الحالة الذي تم إرجاعه (حالة HTTP 200؟ منشورة، حالة HTTP 404؟ لم يتم نشرها بعد). تحميل كتب الكترونية للكمبيوتر مجانا
تبدو مخرجات مهمة Ant المخصصة لدينا (التي تحتوي على تحليل عودي)، وإنشاء صور PNG، والنشر المرتكز على الخدمة كما يلي:
...
[mkdir] تم إنشاء الدليل: /MyProject/Resource_BAS_SetForAccount/doc
[bpeltask] ** بدء DeployWithDependencesTask **
[bpeltask] Resource_BAS_SetForAccount-1.2
[bpeltask] ** المعلمة **
[bpeltask] اسم ملف النقطة: 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] ** تحويل ملف النقطة **
[bpeltask] ** نشر الخدمة **
[bpeltask] ================================================ ===================================================
[bpeltask] تم نشر الخدمة بالفعل (HTTP/1.1 200 OK) 'Resource_BES_CheckAvailability' في الإصدار '1.1' http://localhost:8888/orabpel/default/Resource_BES_CheckAvailability/1.1/ Resource_BES_CheckAvailability?wsdl
[bpeltask] ================================================ ===================================================
[bpeltask] ================================================ ===================================================
[bpeltask] تم نشر الخدمة بالفعل (HTTP/1.1 200 OK) 'Resource_BAS_RemoveFromAccount' في الإصدار '1.5' http://localhost:8888/orabpel/default/Resource_BAS_RemoveFromAccount/1.5/ Resource_BAS_RemoveFromAccount?wsdl
[bpeltask] ================================================ ===================================================
[bpeltask] ================================================ ===================================================
[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
[bpeltask] =============================================== ===================================================
...
الاستنتاج: يلبي النشر المرتكز على الخدمة والذي يقوم تلقائيًا بإنشاء رسوم بيانية للتبعية جميع احتياجاتنا فيما يتعلق بشفافية البنية التحتية لـ SOA. نظرًا لأن النشر يعتمد بالكامل على Ant، فيمكننا أيضًا استخدامه لمهام Luntbuild الليلية ومهام بناء الإنتاج (بيئة البناء المستمرة).
لدعم حوكمة SOA لعملائنا، سنكشف عن عمليتنا العامة ووثائقها، بالإضافة إلى الرسم البياني للتبعية الناتج، في موقع wiki الخاص بالعميل، كما هو موضح هنا:
يتم إنشاء صفحات Wiki ديناميكيًا عندما يقوم البحث في سجل الخدمة باسترداد إصدار الخدمة العامة المسجلة حاليًا. توفر الأشكال الموجودة في صفحة wiki روابط إلى مستودع المصدر (Subversion)، الذي يحتوي على أرقام بالحجم الفعلي للوثائق والإصدارات المسجلة لخدماتنا العامة. انقر على الصورة المصغرة لاسترداد الملف المقابل من Subversion عبر WebDAV