سؤال

need to achieve:


تجهيز التجهيز إلى مهام متعددة

<fork name="customFork" >
  <transition to="task1" />
  <transition to="task2" />        
  <transition to="task3" />
       ... ... ...
  <transition to="taskN" />         
</fork>

يجب تنفيذ محلول JBPM المهام بالتوازي، وليس، كيف يتم ذلك بشكل افتراضي، متسلسل.

لقد قرأت وثائق JBPM التي تقترح استخدامها async="true" على العقد / المهام، لكن من غير الواضح عن كيفية بالضبط يجب تنفيذ ذلك. كان أحد الاقتراح هو الاستمرار في DB، وإرسال المهام إلى قائمة انتظار JMS، وليس للتعامل مع إدارة مخصصة متعددة المعلومات. ومع ذلك، وجدت أنه غريب للغاية أن JBPM ليس لديه حل مباشر لهذا الغرض.

آمل أن يثبتني شخص ما خطأ هنا، وسيعرض لي حلا بسيطا وأنيقا مع JBPM 3.2.6 لأن هذا هو الأحدث المدعومة من قبل قبعة حمراء

شكرًا لك.

هل كانت مفيدة؟

المحلول

كما قد لاحظت، ليس لدى JBPM عناصر تحكم تزامات بيانات مثيل العملية. على سبيل المثال، لا يمكن إغلاق متغيرات العملية عند الوصول إليها ولا يتم تأمينها ضمنيا بواسطة المحرك. سوف تؤدي عمليات إعدام الموازية حقا إلى ظروف السباق بسبب ذلك.

هذا هو مفاضلة تصميم شائع عندما يتعلق الأمر بمحركات BPM. يمكنك تجنب جميع المزالق التحكم في التزامن (الجمود وظروف السباق أو المجاعة ومشاكل الاتساق ...) مع مؤشر ترابط واحد من التنفيذ لكل مثيل عملية. من المفترض أن تكون العمليات التجارية طويلة الأمد ولكن من المفترض أن تكون في انتظار حدوث بعض الحدث معظم الوقت ويجب ألا يحسب مكثف لأنفسهم. لذلك يجب ألا تكون وحدة المعالجة المركزية أبدا عنق الزجاجة عند تنفيذ مثيل عملية واحدة.

يمكنك حل حول هذا القيد من خلال تقسيم عبء العمل الموازي من العملية كما وصفته. يمكنك أيضا إبقائه داخل العملية من خلال إنشاء نشاط Java وتوزيع مؤشرات الترابط يدويا، على الرغم من أن هذا محبوس للغاية. بالنسبة للمبتدئين، ستجعل خيوط JBPM التي تنفذ المثيل ولن تتمكن من مراقبة تقدم عبء العمل المتوازي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top