لمحة جافاوية 13: التزامن في قواعد البيانات

السلام عليكم

لدي مجموعة كبيرة من الأعمال أحاول القيام بها
منذ فترة ليست بالقصيرة
وكالعادة الكسل هو الكسل
من هذه الأعمال:
قراءة البؤساء لفيكتور هوجو
والبداية في برنامج مواعيدي
إصدار النسخة الجديدة من حزمة بياني (مع العلم أن النسخة شبه جاهزة)
التجهيز لحملة ضد الظلم
حتى الأخ عبده يتهمني بالتقصير في حقه
وأني توقفت عن إقحامه في مقالاتي
هناك الكثير من الأعمال المتراكمة
لكن لا حياة لمن تنادي
لاعليكم فهي عادتي ولن أغيرها أبداً
بالنسبة لموضوع اليوم
كثيراً ما تمر بنا برامج قواعد بيانات تكون ذات عمليات مترابطة
بمعنى أن العمليات يجب أن تتم بالجملة
وإلا سينتج عن ذلك مشاكل كثيرة
في الأغلب نلاحظ ذلك في التطبيقات الموزعة
نأخذ المثال التالي
برنامج لبنك يقوم بعملية تحويل من حساب إلى آخر
برنامجنا يقوم بإضافة المبلغ المراد تحويله إلى الحساب المحول إليه
ثم بعد ذلك يقوم بخصم المبلغ من الحساب المحول منه
خذ عندك المشهد التالي
الموظف ضغط على زر التحويل
البرنامج قام بإضافة المبلغ إلى الحساب المحول إليه
حصل قطع في التيار الكهربائي
ولم يقم بخصم المبلغ من الحساب المحول منه
وعلى هذا خسر البنك المبلغ المحول
لذا يجب أن تتم العمليتين بالجملة
إما أن تتم العمليتيتن معاً
أو لا تتم العمليتين أبداً
في الجافا كل عملية تتم على قاعدة البيانات
تقوم الآلة الإفتراضية بتبليغ مدير قاعدة البيانات
لكي يقوم باعتماد التغييرات على قاعدة البيانات تلقائياً
وهذا هو سبب المشكلة التي وقعنا فيها
ولنتخلص من مشكلتنا علينا أن نقوم بالتالي:
1-نضع الجملة التالية قبل العمليات التي يجب أن تنفذ بالجملة

connection.setAutoCommit(false);

هذه الجملة تمنع مدير قاعدة البيانات
من اعتماد التغييرات على قاعدة البيانات تلقائياً
2-ينتظر مدير قاعدة البيانات إلى أن يقوم البرنامج باستدعاء الجملة التالية
لكي يقوم باعتماد التغييرات

connection.commit();

3-لإعادة الوضع إلى الاعتماد التلقائي نضع الجملة التالية

connection.setAutoCommit(true);

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

تحياتي

Tags: , , , , , ,

Leave a Reply