1. Transaksi Deklaratif Musim Semi
1.1 Manajer Transaksi Musim Semi
Spring tidak secara langsung mengelola transaksi, tetapi mendelegasikan tanggung jawab untuk mengelola transaksi ke implementasi transaksi platform tertentu yang disediakan oleh JTA atau mekanisme persistensi yang sesuai. Wadah pegas bertanggung jawab untuk pengoperasian barang -barang, wadah pegas bertindak sebagai wajah, dan metode transaksi disebut pemrosesan peningkatan. Metode objek proxy yang dihasilkan adalah metode target + peningkatan yaitu, programmer transaksi hanya menggunakan operasi CRUD, yaitu, metode target dan metode yang dinyatakan harus dijalankan dalam transaksi.
Spring menyediakan banyak implementasi manajer transaksi bawaan:
DataSourCetransActionManager: Terletak di paket org.springframework.jdbc.datasource, manajer transaksi sumber data menyediakan javax.sql. Manajemen transaksi transaksi tunggal JAVAX.SQL, IBATIS atau MYBATIS Framework;
JDOTRANSACTIONMANAGER: Terletak di paket org.springframework.orm.jdo, menyediakan manajemen transaksi satu javax.jdo.persistenceManagerFactory, untuk manajemen transaksi saat mengintegrasikan kerangka kerja JDO;
JPatRansactionManager: Terletak di paket org.springframework.orm.jpa, memberikan dukungan untuk satu javax.persistence.entityManagerFactory transactions, dan digunakan untuk mengelola transaksi saat mengintegrasikan kerangka kerja implementasi JPA;
HibernatetransactionManager: terletak di paket org.springframework.orm.hibernate3, memberikan dukungan untuk satu org.hibernate.SessionFactory transaction, digunakan untuk manajemen transaksi saat mengintegrasikan kerangka kerja hibernasi; Manajer transaksi ini hanya mendukung versi hibernate3+, dan versi spring3.0+ hanya mendukung versi hibernate 3.2+;
JtatransactionManager: Terletak di paket org.springframework.transaction.jta, memberikan dukungan untuk manajemen transaksi terdistribusi, dan mendelegasikan manajemen transaksi ke manajer transaksi server aplikasi Java EE;
OC4JJTATRANSACTIONMANAGER: Terletak di paket org.springframework.transaction.jta, Spring menyediakan adaptor untuk OC4J10.1.3+ Aplikasi Server Transaction Manager. Adaptor ini digunakan untuk mendukung transaksi lanjutan yang disediakan oleh server aplikasi;
WebSpheruowTransactionManager: Terletak di paket org.springframework.transaction.jta, Spring menyediakan adaptor untuk WebSphere 6.0+ Application Server Transaction Manager. Adaptor ini digunakan untuk mendukung transaksi lanjutan yang disediakan oleh server aplikasi;
WebLogicjtatransactionManager: Terletak di paket org.springframework.transaction.jta, Spring menyediakan adaptor ke WebLogic 8.1+ Application Server Transaction Manager. Adaptor ini digunakan untuk mendukung transaksi lanjutan yang disediakan oleh server aplikasi.
Spring tidak hanya menyediakan manajer transaksi ini, tetapi juga menyediakan manajer untuk manajemen transaksi JMS, dll. Musim Semi memberikan abstraksi transaksi yang konsisten seperti yang ditunjukkan pada gambar.
musim semi dan hibernasi
menjelaskan:
Spring melakukan beberapa persiapan sebelum memanggil manajer transaksi spesifik, menetapkan kebijakan baca dan tulis transaksi terlebih dahulu, dan kebijakan transaksi ini adalah hal -hal publik dan ditulis dalam file konfigurasi Spring. Pemrosesan konten ini perlu ditempatkan di kelas abstrak.
2. Pemrosesan transaksi dalam integrasi musim semi dan hibernasi
1.2 Memperkenalkan file konfigurasi properti dalam formulir XML
<name properti = "Lokasi"> <value> classpath: jdbc.properties </ value> </property>
Konfigurasikan sumber data DBCP
<bean id = "DataSource" Destroy-Method = "Close"> <properti name = "driverclassname" value = "$ {jdbc.driverclassname}" /> <name properti = "url" value = "$ {jdbc.url}" /> <nama properti = "username" value = "$ {jdbc.url}" /<properti nama = "username" value = "$ {JDBC.URL}" value = "$ {jdbc.password}" /> < /bean>Memperkenalkan sessionfactory, gunakan file konfigurasi eksternal hibernate
<bean id = "sessionfactory2"> <name properti = "configLocation"> <value> classpath: hibernate.cfg.xml </ value> </property> </ bean>
Menyuntikkan DAO dan lapisan layanan
<bean id = "persondao"> <name properti = "sessionfactory"> <ref bean = "sessionfactory2"/> </pruptent> </t bean> <bean id = "personservice"> <name properti = "persondao"> <ref bean = "persondao"/</properti> </bean>
Konfigurasikan Manajer Transaksi Hibernate
<bean id = "transactionManager"> <name properti = "sessionfactory"> <ref bean = "sessionfactory2"/> </property> </ bean>
Konfigurasikan transaksi deklaratif
memengaruhi:
1. Tell Spring Container Transaction Manager
2. Tell Spring Container apa metode untuk menggunakan transaksi apa
<tx:advice transaction-manager="transactionManager" id="tx"> <tx:attributes> <!-- name Scope of target method islation isolation level propagation propagation propagation attribute read-only true read-only transaction false read-write transaction--> <tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/> </tx: Atribut> </tx: Saran>
Konfigurasikan titik masuk
<AOP: config> <aop: pointcut ekspresi = "eksekusi (*cn.qjc.hibernate.service.impl.*.*(..))" id = "lakukan"/> <span style = "space putih: pre"> </span> <!-berlaku pointcut "pointcut ke peningkatan metode tambahan-> <aop: advis-ref =" pointcut "pointcut" pointcut-method point-ref-<aop: advisro-ref = "
Kelas Implementasi DAO
* Metode Implementasi 1: warisan hibernedaosupport * @author qjc */ kelas publik persondaoImpl memperluas hibernedaosupport mengimplementasikan persondao {@override public void saveperson (orang) {this.gethibernateTemplate (). Save (save); }}tes
...
Melihat:
1. Jika kelas DAO mewarisi HibernedAoSupport, Anda hanya perlu menyuntikkan SesionFactory ke dalam file konfigurasi Spring.
2. Jika kelas DAO tidak mewarisi HibernedAoSupport, ia perlu memiliki atribut sesiFactory dan menyuntikkannya ke dalam file konfigurasi.
<bean id = "hibernateTemplate"> <name properti = "sessionfactory" ref = "sessionfactory2"> </propert> </bean>
1.2 Dalam bentuk anotasi
1. Terapkan mekanisme pemindaian otomatis Spring dalam file konfigurasi
<konteks: komponen-scan-package = "cn.qjc"/>
2. Memperkenalkan parser anotasi di file konfigurasi
<tx: transaksi-transaksi-manager-manager = "transactionManager"/>
3. Annotate via @transaction di lapisan layanan
Catatan: Jika dijelaskan sebagai transaksi hanya baca di tingkat kelas, pengaturan transaksi @Transaction yang dianotasi dalam metode di kelas ini akan lebih diutamakan daripada pengaturan transaksi tingkat kelas yang dianotasi.
1.3 Propagasi Properti Transaksi Musim Semi
Diperlukan: Metode bisnis perlu dijalankan dalam transaksi. Jika metode ini sudah dalam transaksi saat berjalan, maka bergabunglah dengan transaksi, jika tidak buat transaksi baru untuk diri sendiri (default)
Tidak didukung: Container pegas tidak membuka transaksi. Jika metode ini dipanggil dalam transaksi, transaksi akan ditangguhkan. Setelah metode selesai, transaksi akan dipulihkan.
MembutuhkanNew: Apakah ada transaksi atau tidak, metode bisnis akan selalu membuat transaksi baru.
Mandatorky: Metode bisnis hanya dapat dieksekusi dalam transaksi yang ada. Jika metode bisnis dipanggil tanpa transaksi, wadah melempar pengecualian.
Selain itu, ada properti seperti dukungan, tidak pernah, bersarang, dll., Tetapi default biasanya digunakan
Propagation = "Diperlukan" Konfigurasi ini dapat menyelesaikan masalah sarang transaksi. Apa itu Sarang Transaksi?
Misalnya:
Ada transaksi dalam kerangka kerja alur kerja dan metode tertentu yang mengoperasikan lapisan layanan. Lapisan layanan juga memiliki transaksi sendiri. Ketika layanan dijalankan, sarang transaksi akan terjadi, yaitu, metode itu sendiri memiliki transaksi, dan metode dalam metode ini juga memiliki transaksi. Ini adalah sarang transaksi. Spring memecahkan masalah ini melalui propagasi atribut propagasi transaksi = "diperlukan".
1.4 OpenInsessionView
Setelah integrasi S2SH, Spring mengelola transaksi. Karena menggunakan metode pemrosesan transaksi deklaratif Spring, sesi ditutup segera setelah menyebutnya. Metode GetHibNateTemplate (). Jika ada transaksi dalam metode yang saat ini dieksekusi, sesi ditutup ketika metode lingkungan transaksi dipanggil. Jadi pengecualian akan dihasilkan ketika nilainya output pada halaman.
Metode pemrosesan adalah: Mode OpenSessionInview (dikonfigurasi dalam web.xml)
<nilter> <filter-name> hibernateFilter </tilter-name> <nilter-class> org.springframework.orm.hibernate3.support.opensessionInviewFilter </filter-class> <!-Singlesession benar secara default. Jika diatur ke false, itu sama dengan no OpensessionInview-> <Inch-param> <param-name> Singlesession </param-name> <param-value> true </param-value> </it-param> </tilter> <nilter-mapping> <filter-name> hibernateFilter </filter-name> <ter-Polatter> <Tilter-name> hibernateFilter </filter-name> <Son-Pattern> <TERFORTER MATLATTER> </PERNLOTER/PERSLOCTRE/PERNLET/PERNLETRICE> </PERNLOCT/PERNLET/PERSOLE/PERSOLET>
Dari kode di atas, kita dapat melihat bahwa ketika mengirimkan permintaan, sesi telah dinyalakan dalam OpenSessionInview, dan sesi harus ditutup setelah respons, yang berarti bahwa OpenSessionInview harus sebelum filter struts2. (Letakkan posisi filter struts2 di atas)
Namun, ia juga memiliki kelemahan untuk mengaktifkan OpenSessionInview: karena penutupan sesi tertunda, dan cache hibernate tingkat pertama ada dalam sesi, yang akan menyebabkan sejumlah besar data di-cache tetap dalam memori untuk waktu yang lama.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.