Hibernate-reactive: التعزيز - التكامل مع التعليق التوضيحي للربيع @ المعاملات

تم إنشاؤها على ٢٠ مايو ٢٠٢١  ·  16تعليقات  ·  مصدر: hibernate/hibernate-reactive

أهلا،

نحن في مرحلة التقييم المستمر للتفاعل السبات لاستبدال برنامجنا الحالي المكون من postgres-db + spring boot + spring data + r2dbc. لقد واجهنا الكثير من القيود باستخدام r2dbc وأردنا إعادة استخدام المعرفة الكبيرة التي لدينا بالفعل حول Hibernate.
لقد أعدنا هيكلة خدمة صغيرة كاملة تقريبًا ، وأعدنا كتابة بيانات الربيع الخاصة بنا (مستودع عام) ويبدو أنها جيدة حقًا.

يطرح أحد مطوري المشكلات الرئيسية في خيار استخدام إدارة المعاملات التعريفية (باستخدام التعليق التوضيحي) بدلاً من الآلية.

نحن نعلم أنه ليس الغرض من رد الفعل Hibernate هو تنفيذ مثل هذه الآلية ، ولكن للأطر (Spring ، Quarkus ...) التي تتكامل مع Hibernate ، كما تم القيام به مع Hibernate القياسي. حتى لو أردنا القيام بذلك بأنفسنا ، فإن واجهة برمجة تطبيقات المعاملة في Hibernate التفاعلية ليست هي نفسها واجهة برمجة التطبيقات القياسية Hibernate ولا توجد واجهة برمجة تطبيقات للتفاعل مع مدير المعاملات.

سأكون سعيدًا إذا تمكنا من الحصول على تعليقاتك حول هذا (وأكثر من ذلك إذا استطعت: مبتسم :) ، وإذا كنت لا تزال تعتقد أنه يمكننا القيام بذلك لاقتراح المبادئ التوجيهية العامة لأنه ليس لدينا حاليًا أي دليل على كيفية القيام بذلك.
شكرا

problem

ال 16 كومينتر

حسنًا ، أفترض أن Spring لديه نوع من مفهوم المعترض حيث يمكنك استخدام التعليقات التوضيحية لربط المعترض باستدعاء طريقة الفول. إذا اتصلت بـ withTransaction() من داخل معترض من هذا القبيل ، ثم قمت بالتفويض إلى طريقة الفول ، فهذا كل ما في إدارة المعاملات التعريفية. حقا يجب أن يكون فقط بضعة أسطر من التعليمات البرمجية. (على الأقل سيكون في CDI ، أنا أقل ثقة بشأن الربيع).

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

(OTOH إذا كنت تسأل عن كيفية الاندماج مع مدير معاملات XA ، حسنًا ، هذه علبة مختلفة تمامًا من الديدان ، وهي ليست عملية حقًا مع برنامج التشغيل التفاعلي في الوقت الحالي. ليس لدينا حتى الآن أي معاملة تفاعلية حقًا المديرين.)

في الوقت الحالي ، لا داعي للصفقة الموزعة

ثم يجب أن يعمل المعترض الذي يستدعي SessionFactory.withTransaction() بشكل جيد.

سنحاول بهذه الطريقة والتحديث. شكرا

gavinking يبدو أن Spring ينفذ Transactional باستخدام Aspect. إنه ليس مهمًا حقًا ، ولكن قد يكون أيضًا أسهل بالنسبة لنا في التنفيذ.
لكنني أعتقد أننا لا نستطيع القيام بذلك إلا إذا قمت بفضح واجهة برمجة تطبيقات لـ openTransaction () الالتزام () و rollbackTransaction () في فئة Stage ، نظرًا لأن لدينا واجهة برمجة تطبيقات openSession () و closeSession (). أعتقد أن هناك حاجة إلى كائن المعاملة ، ولا تكفي "withTransaction".
هل له معنى ؟

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

(صحيح أنه لا يمكنك فعل ذلك قبل / بعد الاعتراضات.)

gavinking ، هل يمكنك توضيح ما كتبته من قبل "في مجموعتنا التي سيتم تنفيذها باستخدام سياقات MP." للتحقق مما إذا كانت الصفقة ملزمة بالفعل في التدفق الحالي؟ هل يمكنك الرجوع إلى التعليمات البرمجية ، أو الاختبارات التي تمت كتابتها. نفس الشيء بالنسبة للجلسة ، كيف يمكنني أن أفهم أن الجلسة مفتوحة بالفعل في الدفق الحالي.
شكرا.

اسمع ، ليس لدي أي فكرة كيف تفعل ذلك في الربيع. أنت بحاجة إلى نوع من البناء يكون نوعًا ما مثل ترابط محلي ، ولكنه محلي مرتبط بالتيار التفاعلي الحالي بدلاً من الخيط. أنا متأكد من أنه يجب أن يكون لديهم شيء.

لن أستخدم حاليًا SpringTransactional ، لكنني أنفذ التعليقات التوضيحية للمعاملات الخاصة بنا لتجنب التعمق أكثر في فصل الربيع. لذا كان سؤالي السابق متعلقًا بجملك "في مجموعتنا سيتم ذلك باستخدام سياقات MP".

"مكدسنا" == Quarkus.

أنا أقول أنه عليك أن تجد شيئًا مشابهًا في بيئة الربيع.

لأنه إذا لم تتمكن من ربط قيمة بالدفق التفاعلي الحالي ، فلا يمكنك إجراء معاملات تعريفية ، بهذه البساطة ، وسيتعين عليك فقط إدارة المعاملات "يدويًا". (وهو أمر في غاية البساطة بمجرد الاتصال بـ withTransaction() . لا أفهم حقًا لماذا يعتقد الناس أنهم بحاجة إلى تعليق توضيحي لذلك).

لكنني متأكد من أنه يجب أن يكون هناك طريقة ما للقيام بذلك. أنت فقط تسأل الشخص الخطأ.

قد يكون هذا الشيء ، لكنني حقًا لا أعرف https://projectreactor.io/docs/core/3.4.0-M1/api/index.html؟reactor/util/context/Context.html

الإغلاق: يحل محله # 782.

@ yaakov-berkovitch مع الأشياء التي أضعها في مكانها مع # 779 ، سيكون من الأسهل عليك تنفيذ ذلك.

تضمين التغريدة

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

Sanne picture Sanne  ·  12تعليقات

pqab picture pqab  ·  21تعليقات

DavideD picture DavideD  ·  37تعليقات

hantsy picture hantsy  ·  7تعليقات

Xset-s picture Xset-s  ·  3تعليقات