1. المعاملات الإعلانية الربيع
1.1 مدير المعاملات في الربيع
لا تدير Spring المعاملات مباشرة ، ولكنها تنفيل مسؤولية إدارة المعاملات إلى تطبيقات المعاملات لمنصة معينة توفرها JTA أو آليات الثبات المقابلة. حاوية الربيع مسؤولة عن تشغيل الأشياء ، تعمل حاوية الربيع كوجه ، وتسمى طريقة المعاملة معالجة التحسين. طريقة كائن الوكيل التي تم إنشاؤها هي الطريقة الهدف + تحسين ، فإن مبرمج المعاملات يستخدم فقط عملية CRUD ، أي ، الطريقة المستهدفة والأسلوب المعلن يجب تشغيلها في المعاملة.
يوفر Spring العديد من تطبيقات مدير المعاملات المدمجة:
DatasourCetransactionManager: يقع في حزمة Org.springframework.jdbc.dataSource ، يوفر مدير معاملات مصدر البيانات Javax.sql.Datasource معاملات ، لإدارة المعاملات لإطار عمل SPRING JDBC ، Ibatis أو MyBatis Framwork ؛
jDotransactionManager: يقع في حزمة org.springframework.orm.jdo ، مما يوفر إدارة المعاملات من Javax.jdo.persistencemanagerfactory ، لإدارة المعاملات عند دمج إطار JDO ؛
jpatransactionmanager: يقع في حزمة org.springframework.orm.jpa ، وتوفير الدعم ل javax.persistence.
hibernatetransactionmanager: يقع في حزمة org.springframework.orm.hibernate3 ، مما يوفر الدعم لمؤسسة واحدة. يدعم مدير المعاملات هذا فقط إصدار Hibernate3+ ، وإصدار Spring3.0+ يدعم فقط إصدار Hibernate 3.2+ ؛
JTatransactionManager: يقع في حزمة org.springframework.transaction.jta ، وتوفير الدعم لإدارة المعاملات الموزعة ، وتفويض إدارة المعاملات إلى مدير معاملات خادم Java EE ؛
OC4JJtatransActionManager: يقع في حزمة org.springframework.transaction.jta ، يوفر Spring محولًا إلى OC4J10.1.3+ Application Server Transaction Manager. يتم استخدام هذا المحول لدعم المعاملات المتقدمة التي يوفرها خادم التطبيق ؛
WebSphereUowTransActionManager: يقع في حزمة org.springframework.transaction.jta ، يوفر Spring محولًا لمدير معاملات خادم WebSphere 6.0+. يتم استخدام هذا المحول لدعم المعاملات المتقدمة التي توفرها خوادم التطبيق ؛
WebLogicJtatransactionManager: يقع في حزمة Org.SpringFramework.Transaction.jta ، يوفر Spring محولًا لمدير WebLogic 8.1+ لخادم التطبيق. يتم استخدام هذا المحول لدعم المعاملات المتقدمة التي يوفرها خادم التطبيق.
لا يوفر Spring فقط مديري المعاملات هؤلاء ، ولكن يوفر أيضًا مديرين لإدارة معاملات JMS ، إلخ.
الربيع والإسبات
يوضح:
تقوم Spring ببعض الاستعدادات قبل الاتصال بمدير المعاملات المحدد ، وتحديد سياسات قراءة وكتابة المعاملة مقدمًا ، وسياسات المعاملات هذه هي الأشياء العامة وتتم كتابتها في ملف تكوين الربيع. يجب وضع معالجة هذه المحتويات في فصل تجريدي.
2. معالجة المعاملات في دمج الربيع والإسبات
1.2 تقديم ملف تكوين الخصائص في نموذج XML
<property name = "socations"> <value> classpath: jdbc.properties </value> </property>
تكوين مصدر بيانات DBCP
<bean id = "dataSource" تدمير method = "close"> <property name = "driverClassName" value = "$ {jdbc.driverClassName}" /> <property name = "url" value = "$ {jdbc.url}" /> <property name = username "value = {jdbc.usern} value = "$ {jdbc.password}" /> </bean>تقديم SessionFactory ، استخدم ملف التكوين الخارجي Hibernate
<bean id = "sessionfactory2"> <property name = "configlocation"> <value> classpath: hibernate.cfg.xml </value> </sprement> </ban>
حقن DAO وطبقات الخدمة
<bean id = "persondao"> <property name = "sessionfactory"> <ref bean = "sessionfactory2"/> </property> </boan> <bean id = "personservice"> <property name = "persondao
تكوين مدير معاملات السبات
<bean id = "TransactionManager"> <property name = "SessionFactory"> <ref bean = "sessionfactory2"/> </property> </bean>
تكوين المعاملات التعريفية
تأثير:
1. أخبر مدير معاملات حاوية الربيع
2. أخبر حاوية الربيع ما هي الطريقة لاستخدام المعاملة
<tx: نصيحة المعاملة-manager = "TransactionManager" id = "tx"> <tx: entributes> <!-نطاق الاسم لطريقة الهدف طريقة عزل مستوى عزل انتشار انتشار انتشار انتشار انتشار مستوى القراءة الحقيقية فقط "read-enly =" القراءة = "القراءة =" القراءة ". </tx: attributes> </sx: نصيحة>
تكوين نقطة الدخول
<aop: config> <aop: pointcut expression = "execution (*cn.qjc.hibernate.service.impl.*.*(..))
فئة التنفيذ DAO
* طريقة التنفيذ 1: ويرث hibernatedaoSupport * Author qjc */ الطبقة العامة persondaoimpl يمتد hibernatedaoSupport ينفذ persondao {override public void savePerson (شخص الشخص) {this.gethibernatetmplate (). }}امتحان
...
يلاحظ:
1. إذا كانت فئة DAO ترث حصة heibernatedaoSupport ، فأنت بحاجة فقط إلى حقن SessionFactory في ملف تكوين الربيع.
2. إذا لم ترث فئة DAO عن السبات ، فإنها تحتاج إلى سمة SessionFactory وحقنها في ملف التكوين.
<bean id = "hibernatetemplate"> <property name = "sessionfactory" ref = "sessionfactory2"> </prereent> </bean>
1.2 في شكل شرح
1. تطبيق آلية المسح التلقائي في الربيع في ملفات التكوين
<السياق: مكون المسح الضوئي package = "cn.qjc"/>
2. إدخال محلل شرح في ملف التكوين
<تكساس: ماناجير المعاملة التي تعتمد على التعليقات التوضيحية = "TransactionManager"/>
3. التعليق عبر @transaction في طبقة الخدمة
ملاحظة: إذا تم التعويد كمعاملة للقراءة فقط على مستوى الفصل ، فإن إعدادات المعاملات الخاصة بـ transaction المشروح في الأساليب في هذه الفئة ستتخذ الأسبقية على إعدادات المعاملات الخاصة بمستوى الفصل.
1.3 خصائص انتشار معاملات الربيع
مطلوب: يجب تشغيل طريقة العمل في معاملة. إذا كانت الطريقة موجودة بالفعل في معاملة عند تشغيلها ، فقم بالانضمام إليها إلى المعاملة ، وإلا قم بإنشاء معاملة جديدة لنفسك (افتراضي)
غير مدعوم: حاوية الربيع لا تفتح معاملة. إذا تم استدعاء الطريقة في معاملة ، فسيتم تعليق المعاملة. بعد الانتهاء من الطريقة ، سيتم استعادة المعاملة.
يتطلب الأمر: ما إذا كانت المعاملة موجودة أم لا ، فإن طريقة العمل ستقوم دائمًا بإنشاء معاملة جديدة.
Condatorky: لا يمكن تنفيذ طريقة العمل إلا في صفقة موجودة. إذا تم استدعاء طريقة العمل بدون معاملة ، فإن الحاوية ترمي استثناء.
بالإضافة إلى ذلك ، هناك خصائص مثل الدعم ، أبدًا ، متداخلة ، وما إلى ذلك ، ولكن عادة ما يتم استخدام الافتراضي
الانتشار = "مطلوب" يمكن لهذا التكوين حل مشكلة تعشيش المعاملة. ما هو تعشيش المعاملة؟
على سبيل المثال:
هناك معاملات في إطار عمل سير العمل وطريقة معينة تدير طبقة الخدمة. طبقة الخدمة لديها أيضا معاملاتها الخاصة. عند تنفيذ الخدمة ، ستحدث تعشيش المعاملات ، أي أن الطريقة نفسها لها معاملات ، والطرق في الطريقة لها معاملات. هذا هو تعشيش المعاملة. Spring يحل هذه المشكلة من خلال انتشار سمة انتشار المعاملة = "مطلوب".
1.4 OpenInsessionView
بعد تكامل S2SH ، يدير Spring المعاملات. نظرًا لأنه يستخدم طريقة معالجة المعاملات التعريفية الخاصة بـ Spring ، يتم إغلاق الجلسة فورًا بعد استدعاء هذا. إذا كانت هناك معاملات في الطريقة التي تم تنفيذها حاليًا ، يتم إغلاق الجلسة عندما تسمى طريقة بيئة المعاملة. لذلك سيتم إنشاء استثناء عند إخراج القيمة على الصفحة.
طريقة المعالجة هي: وضع OpenSessionInview (تم تكوينه في web.xml)
<Ivilter> <ilter-name> hibernatefilter </filter-name> <filter-class> org.springframework.orm.hibernate3.support.opensessioninviewfilter </filter-class> <! إذا تم تعيينه على خطأ ، فهذا يساوي عدم وجود opensessionInview-> <Ing-param> <param-name> singlesession </param-name> <param-value> true </parm-value> </ith-param> </filter> <filter-mapping> </filter mapping>
من الرمز أعلاه ، يمكننا أن نرى أنه عند تقديم طلب ، تم تشغيل الجلسة في OpenSessionInview ، ويجب إغلاق الجلسة بعد الاستجابة ، مما يعني أن OpensessionInview يجب أن تكون قبل مرشح Struts2. (ضع موضع مرشح Struts2 أعلاه)
ومع ذلك ، فإنه لديه أيضًا عيوب لتمكين OpenSessionInview: نظرًا لتأخير إيقاف الجلسة ، كما أن ذاكرة التخزين المؤقت من المستوى الأول من السبات في الجلسة ، مما سيؤدي إلى بقاء كمية كبيرة من البيانات المخزنة في الذاكرة لفترة طويلة.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.