سؤال

أحاول فهم ما يحدث أثناء ظروف السباق في متجر بيانات Google AppEngine.لقد كنت أستخدم Objectify ، لذلك سأستخدم هذا الترميز هنا. Genacodicetagpre

ضع في اعتبارك الآن أن لديّ اثنين من القابضين للتشغيل يحاولان تعديل رمز العلامة العام لسيارة معينة في وقت واحد. Genacodicetagpre

أفترض في هذه الحالة أنه غير محدد ما إذا كانت السيارة (10) "مملوكة" لـ "أ" أو "ب" ولكن لن يتم الإبلاغ عن أي أخطاء.لن يكون من الواضح لـ "الخاسر" حتى تستمر عمليات الكتابة في مخزن البيانات.ماذا ستكون نتيجة المطبوعات؟

إذا كنت قد استخدمت المعاملات ، فهل كان أحد العناصر القابلة للتشغيل ("الخاسر") قد أثار استثناءً؟

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

المحلول

  1. يستخدم كلا الكيانين نفس المعرف (10) ، لذا سيحل أحد الرموز العامة محل الرمز الآخر.السؤال فقط هو الذي يفعل ذلك أولاً.

  2. ستحصل المعاملة الثانية لتوليد الرمز البرمجي على الاستثناء.

تعديل:

قد تحصل على استثناءات مختلفة أثناء المعاملة ، ولا تعني جميعها أن التغيير لم (أو لن يتم الالتزام به).يجب عليك في الواقع فحص المعاملة والتراجع إذا كان ذلك مناسبًا.راجع المثال الأول: http://code.google.com/appengine/docs/java/datastore/transactions.html

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