إذا قمت بالوصول إلى UserTransaction، فهل هذا يعني أنني أستخدم 2 مرحلة الالتزام أو XA؟

StackOverflow https://stackoverflow.com/questions/2413911

سؤال

Usertransaction ut = بحث .... ut.begintransaction ()؛ savetofoodb ()؛ statelessejb.transactionsupportedmetmethod ()؛ // يحفظ شيئا إلى foo db savetofoodb ()؛ ut.commit ()؛

إذا كنت أفعل ما ورد أعلاه، ففي فهمي هو أنه ليس معاملة XA لأنها لا تمتد عبر موارد متعددة (مثل DB Plus JMS). هل فهمي صحيح؟

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

المحلول

يمكن تكوين مصدر البيانات من نوعين:

  • شا: يمكن أن تشارك بيانات البيانات هذه في توزيع المعاملات
  • محلي: كما دعا غير XA، لا يمكنهم المشاركة في معاملة موزعة

ال UserTransaction يتم تعريفه في مواصفات JTA التي تصف كيفية تنسيق المشارك في معاملة موزعة.

ومع ذلك، فإن خادم التطبيق الذي ينفذ مواصفات JTA خالية من التحرر في القيام بالكثير من التحسينات. واحد منهم هو last-agent-optimization, ، والتي تسمح للمشارك الأخير في المعاملات الموزعة محلي. وبعد ثم يتم الالتزام المنتظم للمشاركين الأخيرين. إذا كان هناك مشارك واحد فقط، فهذا هو الحال دائما.

بالمختصر:

  • إذا كان لديك أكثر من مشارك واحد، فإن XA و 2 مرحلة يلزم استخدامها
  • إذا كان هناك مشارك واحد فقط، فإن معظم خادم التطبيق يدعم مصدر البيانات المحلي ولا تستخدم بروتوكول الالتزام المرحلة بالكامل.

بالنسبة ل Glassfish See:

تعديل

الفقرة "نطاق المعاملات" من الزجاج توثيق يفسر ذلك أفضل مني. أعتقد أنه هو نفسه بالنسبة لجميع خادم التطبيقات.

تتضمن المعاملة المحلية مورد واحد فقط غير XA ويتطلب تنفيذ جميع مكونات التطبيق المشاركة في عملية واحدة. تحسين المعاملات المحلية محددة لمدير الموارد وشفاف في تطبيق Java EE.

في خادم التطبيق، يكون مورد JDBC غير XA إذا كان يفي بأي من المعايير التالية:

  • في تكوين مسبح اتصال JDBC، لا تقوم فئة DataSource بتنفيذ واجهة JAVAX.SQL.XADATASORCE.

  • لا يتم التحقق من مربع دعم المعاملات العالمية، أو عدم وجود إعداد نوع المورد أو لم يتم تعيينه إلى Javax.sql.xadataSource.

تبقى المعاملة محلية إذا بقيت الحالات التالية صحيحة:

  • يتم استخدام مورد واحد فقط غير XA. في حالة استخدام أي مورد غير XA إضافي، يتم إحباط المعاملة.
  • لا يحدث أي استيراد أو تصدير.

يتم توزيع المعاملات التي تنطوي على موارد متعددة أو عمليات مشارك متعددة أو معاملات عالمية. يمكن أن تنطوي معاملة عالمية على مورد واحد غير XA إذا تم تمكين تحسين الوكيل الأخير. خلاف ذلك، يجب أن تكون جميع الموارد xa. يتم تعيين خاصية استخدام الوكيل للأحدث إلى True افتراضيا. للحصول على تفاصيل حول كيفية تعيين هذه الخاصية، راجع تكوين خدمة المعاملة.

في حالة استخدام مورد XA واحد فقط في المعاملة، يحدث ارتكاب مرحلة واحدة، وإلا يتم تنسيق المعاملة مع بروتوكول الالتزام على مرحلتين.

نصائح أخرى

بمجرد بدء تشغيل المستخدم، ثم احصل على اتصال بالموارد (مثل قواعد البيانات) باستخدام Connection-Factory الذي يتم الإعلان عنه ليكون داعما xa، فهذا يعني أن الاتصال سيصبح جزءا من معاملة XA. أيضا، لا يهم على الإطلاق ما إذا كنت تتصل بأنواع واحدة أو متعددة من الموارد مثل JMS وقاعدة البيانات.

امل ان يساعد.

نيتين

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