المعاملات (خاصية Atomicity) في EJB 3 تنطبق فقط على عمليات قاعدة البيانات - هل أنا على حق؟

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

سؤال

أعلم أنه يمكن استخدام المعاملات لتحقيق الذرة.

مثل إذا methodOne() methodTwo() methodThree() يتم تجميعها في معاملة واحدة ، إذا فشل أي من الطريقة ، يتم التراجع عن العملية بأكملها. قد يؤدي التراجع إلى تراجع على مستوى قاعدة البيانات ونتيجة لذلك سيتم إحضار قاعدة البيانات إلى حالة ما ، كما كانت قبل المعاملة.

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

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

المحلول

المعاملات (خاصية Atomicity) في EJB 3 تنطبق فقط على عمليات قاعدة البيانات - هل أنا على حق؟

لا أنت لست. تنطبق المعاملات على موارد المعاملات, ، مواصفات Java EE التعرف على ثلاثة أنواع من موارد المعاملات: قواعد بيانات JDBC ، وجهات JMS ، و "خدمات المعاملات الأخرى التي يتم الوصول إليها من خلال JCA".

ولكن ماذا لو قامت الأساليب بإجراء تغييرات على المتغيرات الحكومية أو المتغيرات الثابتة أو كتبت إلى بعض الملفات في نظام الملفات؟

هذه ليست موارد للمعاملات (إلا إذا كنت تكتب إلى نظام الملفات من خلال موصل JCA في وقت لاحق).

نصائح أخرى

موارد نظام الملفات ليست معاملات. لذلك سيكون عليك أن تدحرج تغييراتك مرة أخرى. أو يجب أن تنظر إلى محولات موارد نظام الملفات التي توفرها الحاويات.

المعاملات في هذا السياق تشير إلى معاملات قاعدة البيانات. إذا وضعت رمز Java ، الذي يغير المتغيرات ، أو ينتج الإخراج إلى نظام الملفات ، فأنت لا تستخدمه جيدًا. يجب أن تبدأ معاملة وجعل العمليات فقط إلى قاعدة البيانات.

على الرغم من أنه إذا قامت DBMS بإجراء تغييرات على نظام الملفات الخاص بك (من خلال إجراء المتجر ، على سبيل المثال) ، فيجب عليك التحقق من وثائق DBMS.

لذلك ، اقرأ الكود الخاص بك ، إذا كان لديك رمز بعد أمر "بدء معاملة" ، فيجب عليك مراجعته.

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