سؤال

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

تتمثل الإجابة السهلة والمخصصة في إضافة "طريقة التراجع" الخاصة إلى خدمة الويب لكل طريقة "وظيفة حقيقية".ما أطلبه هو طريقة موحدة للقيام بذلك.

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

المحلول

هناك عدد من التقنيات تتطور، لكن المشكلة لا تزال متطورة بدرجة كافية بحيث لم توفر لنا عملية التقييس بعد حلاً محمولاً بالكامل.

الخيار الأول، يمكنك جعل معاملات خدمات الويب على علم بها.يفترض هذا بالطبع أن لديك السيطرة عليها، على الرغم من أن كتابة وكيل على دراية بالمعاملة للخدمات غير المتعلقة بالمعاملات يعد أيضًا خيارًا في بعض الحالات.

يعد بروتوكولا WS-AT وWS-BA من المعايير الرائدة لخدمات الويب الخاصة بالمعاملات.ولسوء الحظ فإنهم يحددون البروتوكول فقط، وليس روابط اللغة.بمعنى آخر، لا توجد واجهة برمجة تطبيقات قياسية على مستوى لغة البرمجة.بالنسبة لـ Java، أقرب شيء هو JSR-156، لكنه ليس جاهزًا بعد.

ثم تصبح المشكلة:كيفية ربط EJB (أيمعاملة JTA/XA) إلى WS واحد.وبما أن النماذج المستخدمة بواسطة بروتوكولي WS-AT وXA ترتبط ارتباطًا وثيقًا، فيمكن تحقيق ذلك عن طريق جسر البروتوكول.توفر العديد من خوادم التطبيقات شيئًا واحدًا فقط في هذه السطور.قدمت JBoss منتجاتها في JavaOne - انظر http://anonsvn.jboss.org/repos/labs/labs/jbosstm/workspace/jhalliday/txbridge/BOF-4182.odp

لاحظ أنه يمكن أيضًا استخدام تقنية تجسير البروتوكول في الاتجاه المعاكس، للسماح لـ EJB الذي يستخدم على سبيل المثال.واجهة خلفية لقاعدة بيانات XA، ليتم عرضها كخدمة ويب للمعاملات.

ومع ذلك، فإن نموذج القفل الذي تستخدمه معاملات الالتزام على مرحلتين مناسب فقط للمعاملات قصيرة العمر في نفس مجال التحكم.إذا كانت خدماتك تعمل في نفس مركز بيانات الشركة، فمن المحتمل أن تفلت من العقاب.للتوزيع على نطاق أوسع، سواء كان جغرافيًا أو إداريًا، ربما تريد إلقاء نظرة على WS-BA، وهو بروتوكول معاملات خدمة الويب المصمم خصيصًا لمثل هذا الاستخدام.

يستخدم WS-BA نموذجًا قائمًا على التعويض يصعب برمجته.يعتمد بشكل أساسي على التقنية التي ذكرتها:يتم التراجع عن تأثير طرق الخدمة عن طريق استدعاء طريقة التعويض.قد يكون تنفيذ ذلك أمرًا صعبًا، لكن أحد المتدربين في JBoss قام بإعداد إطار عمل توضيحي لطيف يسمح لك بتحديد طرق التعويض بأقل جهد ممكن وتشغيلها تلقائيًا.إنها ليست موحدة، ولكنها تستحق التحقق إذا اخترت هذا النهج: http://www.jboss.org/jbosstm/baframework

نصائح أخرى

تستخدم

وخدمات ويب-التنسيق (WS-C) وخدمات ويب-عملية (WS-T) المواصفات التي طورتها مايكروسوفت، وأنظمة BEA وIBM في مثل هذه الحالات ما أعرف. يمكنك أن تبدأ من قراءة href="http://www-128.ibm.com/developerworks/xml/library/x-transws/" و <أ href ل = "http://www.ibm.com/developerworks/webservices/library/ws-comproto/" يختلط = "noreferrer"> مقارنة بين بروتوكولات المعاملات خدمات ويب المواد المقدمة من IBM لجعلها واضحة.

في الواقع، كنت عادة لا تحتاج فقط إلى أسلوب التراجع مخصصة ولكن أيضا مخصص ارتكاب الأسلوب. خلاف ذلك، تحصل في مشاكل مثل تلك التي وجدت في مستوى WS-BA.

وانظروا فقط إلى <لأ href = "http://www.atomikos.com / المنشورات / TryCancelConfirm "يختلط =" نوفولو noreferrer "> http://www.atomikos.com/Publications/TryCancelConfirm للحصول على مادة مفصلة. وذكرت ميزات هناك المتوفرة في Atomikos ExtremeTransactions ... هذا المنتج أيضا يدعم الكلاسيكية "ACID" أسلوب معاملات الخدمة على شبكة الإنترنت.

وHTH

وغي

تنويه: أعمل لAtomikos

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