ما الذي يجب علي فعله لدمج JTA في تطبيق Java SE؟

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

  •  20-08-2019
  •  | 
  •  

سؤال

لنفترض أنني أريد تنفيذ حاوية تطبيق. ليست مكدس Java EE بالكامل ، لكنني بحاجة إلى توفير الوصول إلى موارد ومعاملات JDBC إلى رمز الطرف الثالث الذي سيتم نشره في تطبيق أكتب.

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

كيف يمكنني دمج الدعم توفير موارد الاتصال ومعاملات JTA في تطبيق Java SE الخاص بي؟

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

المحلول 7

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

انتهى الأمر إلى أن حل هذا الأمر يطلب مني استخدام مزود JNDI في عملية TOMCAT أيضًا ، من أجل ربط المعاملة باسم JNDI. نظرًا لقيود هذا المزود ، لم أتمكن من استخدام الاسم الافتراضي لمستخدم مستخدم JTA ، وهو أمر غير واضح على الفور من الوثائق.

شكرا للجميع على الإجابات المفيدة على أي حال!

نصائح أخرى

كيف يمكنني دمج الدعم لتوفير موارد الاتصال ومعاملات JTA في تطبيق J2SE الخاص بي؟

مرحبا كريس

هناك عنصران لهذه المشكلة:

1) صنع API JTA ، وخاصة UserTransaction ، متاحًا لرمز التطبيق ، بحيث يمكن أن تبدأ المعاملات وإنهاءها. في بيئة Java EE تم نشرها في موقع معروف في JNDI. إذا كان لديك تطبيق JNDI ، فهذا هو الطريق للذهاب (استخدم فئة JNDIMANAGER JBOSSTS لمساعدتك في الإعداد). خلاف ذلك ، تحتاج إلى نوع من كائن المصنع أو آلية الحقن. بالطبع يمكنك أيضًا فضح فئة التنفيذ مباشرة إلى المستخدم النهائي ، ولكن هذا أمر سيء إلى حد ما لأنه يحد من أي فرصة لتبديل JTA في المستقبل.

public javax.transaction.UserTransaction getUserTransaction() {
  return new com.arjuna.ats.internal.jta.transaction.UserTransactionImple();
}

هذا كل شيء - يمكنك الآن البدء وارتكاب المعاملات والتراجع. تنشر بعض الحاويات أيضًا فئة TransactionManager للتطبيقات بطريقة مماثلة ، ولكنها مصممة حقًا لاستخدامها من قبل الحاوية نفسها ونادراً ما تحتاجها رمز التطبيق.

2) إدارة تجنيد Xaresources تلقائيًا. مديري الموارد IE قواعد البيانات وقوائم الرسائل ، لديهم برامج تشغيل تنفذ Xaresource. في كل مرة يحصل فيها التطبيق على اتصال بمدير الموارد ، يجب تسليم Xaresource المقابل إلى تطبيق JTA حتى يتمكن من قيادة مدير الموارد كجزء من 2PC. معظم خوادم التطبيقات تأتي مع JCA التي تعالج هذا تلقائيًا. في البيئات التي بدونها ، تحتاج إلى بعض البديل لحفظ رمز التطبيق من الاضطرار إلى القيام بهذه المهمة الشاقة باليد. يتولى المعاملات المجمعة مع JBOSSTS هذا مع اتصالات JDBC. قد يستحق Xapool أيضًا النظر.

تم تضمين JBOSSTS في العديد من البيئات على مر السنين. يتم توثيق بعض الدروس المستفادة في دليل التكامل http://anonsvn.jboss.org/repos/labs/labs/jbosstm/trunk/atsintegration/docs/ ] وإذا كنت تريد مثالًا يعمل ، فيمكنك إلقاء نظرة على عمل تكامل Tomcat http://anonsvn.jboss.org/repos/labs/labs/jbosstm/workspace/jhalliday/tomcat-integration/ ]

JBOSS TM فظيعة. على الأقل ، إذا كنت تأمل في المعاملات الحمضية.

مرحبا إريكسون

لا أعتقد أنني سأذهب بقدر "فظيع". إنه قوي بشكل لا يصدق وقابل للتكوين للغاية ، والذي يمكن أن يجعل تجربة خارج الصندوق شاقة بعض الشيء للقادمين الجدد. يعد تكوين الاسترداد الصحيح أمرًا صعبًا بشكل خاص ، لذلك أؤيد تمامًا تعليقك حول الاختبار الصارم. علاوة على ذلك ، لست على علم بأي حالات اختبار موثقة تفشل فيها حاليًا في توفير نتائج الحمض عند استخدامها مع مديري الموارد المتوافقة مع المواصفات. إذا كان لديك مثل الحالة ، أو مجرد اقتراحات بناءة لتحسين ، فيرجى إخبار JBoss حتى يمكن معالجة المشكلة.

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

-1 الربيع لا يوفر تطبيق JTA ، مجرد غلاف لمختلف الطرفات الثالثة. هذا سوء فهم شائع.

JTA تدعم المعاملات المحلية والمعاملات العالمية.

أنا أخشى اعتقادًا خاطئًا آخر. تتعامل JTA Spec فقط مع المعاملات العالمية XA IE. توجد تقنيات مختلفة معروفة لجعل معاملات معاملات JTA تقود المعاملات المحلية. هذه عادة ما تنطوي على لف الاتصال في xaresource. في حين أن معظم التطبيقات تدعم هذا ، فهي في الواقع خارج نطاق المواصفات ، وبالتالي يجب عليك التحقق من البائع قبل اختيار تنفيذ JTA إذا كنت بحاجة إلى هذا السلوك.

محاولة المعاملات Atomikos.

على عكس تطبيقات JTA/XA المفتوحة المصدر المتنافسة ، تمت كتابة هذا التطبيق من البداية لـ JSE. وبالتالي ، فإنه يوفر تجمعات JDBC و JMS المتميزة بالإضافة إلى وظائف JTA/XA ، وستجد أنه من السهل جدًا دمجها في تطبيقاتك.

أفضل رجل

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

يمكنك استخدام الربيع ، لأنني لست حريصًا.

مثال على ما قد تريده هو هنا

تدعم JTA المعاملات المحلية و المعاملات العالمية.

يمكن التعامل مع المعاملات المحلية بسهولة من قبل الربيع أو JPA أو حتى يدويًا على الاتصالات.

المعاملات العالمية يتطلب منسق المعاملات. هذا منتج/مكتبة منفصلة غير متوفرة بسهولة في المصدر المفتوح (أو على الأقل لست على دراية به).

لذا ، إذا نظرت إلى رأس رسالتك ("JTA") ، فإن الإجابة هي لا توجد طريقة بسيطة.

إذا قرأت نشرك نفسه ("توفير الوصول إلى موارد ومعاملات JDBC") ، سأقول الربيع ، JPA و Hibernate كلها ستغطي احتياجاتك (كما فهمتهم).

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

"TM من JBoss مروع. على الأقل ، إذا كنت تأمل في المعاملات الحمضية. من الأفضل أن يقول حوله هو أنه من المحتمل ألا يلفت وحده ... معظم مديري المعاملات (حتى بعضهم التجاري) لا يعملون حقًا ".

لست متأكدًا من الواجب المنزلي الذي قمت به لإدلاء البيان أعلاه ، لكن JBOSSTS (TM في JBOSS منذ عام 2006 ، عندما تم الحصول عليها) توفر دلالات الحمض الكاملة. كان أيضًا في الأصل جزءًا من مجموعة HP NetAction ، حيث تم نشره في تطبيقات مهمة أكثر من أي من TMS مفتوح المصدر الآخر.

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