Spring, TX yönetimi üzerinde bize ince ayarlı kontrol sağlayan programatik işlemi destekliyor. Spring'in TransactionTemplate kullanan
1.: Bahar Belgeleri göre, bir tarafından programatik TX yönetimini kullanabilirsiniz doğrudan PlatformTransactionManager yararlanarakBahar programatik işlem yönetimi uyarısı?
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
protected void doInTransactionWithoutResult(TransactionStatus status) {
try {
updateOperation1();
updateOperation2();
} catch (SomeBusinessExeption ex) {
status.setRollbackOnly();
}
} });
2. (DAO içine PlatformTransactionManager uygulanmasını enjekte):
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setName("SomeTxName");
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
//txManager is a reference to PlatformTransactionManager
TransactionStatus status = txManager.getTransaction(def);
try {
updateOperation1();
updateOperation2();
}
catch (MyException ex) {
txManager.rollback(status);
throw ex;
}
txManager.commit(status);
için sadeleştirme uğruna, diyelim ki JDBC veritabanı işlemiyle uğraşıyoruz. herhangi bir veritabanı işlemi ikinci snippet'te updateOperation1(),updateOperation2()
meydana geldi için
ben, operasyon aslında herhangi bir işlem içinde yapılmazsa değilse ya ortada bir, JDBCTemplate
veya JDBCDaoSupport
ile uygulanan, merak ediyorum?
Benim analizim, JDBCTemplate
veya JDBCDaoSupport
kullanmıyorsak, kaçınılmaz olarak veri kaynağı yönetiminden bağlantı oluşturacak/alacaktır. Elde ettiğimiz bağlantı, işlemi yönetmek için temel alınan PlatformTransactionManager
tarafından kullanılan bağlantı değildir.
PlatformTransactionManager
karşılığında
TransactionSynchronizationManager
alınan
ConnectionHolder
içerdiği bir bağlantı almayı dener bulundu yağsız. Ben de
JDBCTemplate
ve
JDBCDaoSupport,
da
TransactionSynchronizationManager
parçacığı başına bağlantısı dahil olmak üzere birçok kaynağı yöneten
TransactionSynchronizationManager.
Çünkü benzer rutin ile bağlantıyı elde etmeye çalışmak bulundu
(temelde bir iş parçacığı yönetilen kaynağın kendine özgü bir örneğini elde etmek amacıylaThreadlocal
kullanın)
PlatformTransactionManager ve JDBCTemplate
veya JDBCDaoSupport
tarafından alınan bağlantıların aynı olduğunu düşünüyorum, bu durum, yayın programlı işleminin updateOperation1(),updateOperation2()
'un işlem tarafından nasıl korunacağını açıklayabilir.
Analizim doğru mu? öyleyse, neden Bahar dokümantasyonu bu uyarıya dikkat etmedi?