2011-08-28 12 views
5

kullanmak için veri kaynağı Soruyu nasıl formüle edeceğimi tam olarak bilmiyorum, bu yüzden bana tamamen yanlış düşünüyorum düşünüyorum.JDBCTemplate with TransactionTemplate ve Bağlantı Havuzu,

JdbcTemplate ve TransactionTemplate kullanmak istiyorum. Bağlantı havuzumu veri kaynağı olarak başlatıp, veri kaynağı olarak bir işlem yöneticisi oluşturmaya başladım.

transactionTemplate = new TransactionTemplate(transactionManager); 
JdbcTemplate jdbc = new JdbcTemplate(transactionManager.getDataSource()); 

Şimdi mulitple ipler transactionTemplate ve jdbc eriş:

 BoneCPConfig connectionPoolConfig = new BoneCPConfig(); 
    connectionPoolConfig.setJdbcUrl(...); 
    connectionPoolConfig.setUsername(...); 
    connectionPoolConfig.setPassword(...); 
    connectionPoolConfig.setMinConnectionsPerPartition(...); 
    connectionPoolConfig.setMaxConnectionsPerPartition(...); 
    dataSource = new BoneCPDataSource(connectionPoolConfig); 
    DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); 
    definition.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED); 
    DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(); 
    transactionManager.setDataSource(dataSource); 

Ama şimdi benim TransactionTemplate ve JdbcTemplate oluşturmak istiyorum. Bu kod, doInTransaction'da yapılan her şeyin tüm jdbc çağrıları için aynı bağlantıyı kullandığını garanti eder mi?

Bağlantı bir şekilde dahili olarak bağlantılı, çünkü JdbcTemplate ve TransactionTemplate istedikleri bağlantıyı kullanabilirmiş gibi görünüyor. Kodum doğru mu/kaydediliyor mu?

cevap

5

Her şey yoluna girmeli. Kritik parça, JdbcTemplate ve DataSourceTransactionManager'un, yaptığınız DataSource nesnesine sahip olmasıdır.

Bu kod doInTransaction'da yapılan her şeyin tüm jdbc çağrıları için aynı bağlantıyı kullandığını garanti eder mi? Bağlantı bir şekilde dahili olarak bağlantılı mıdır, çünkü JdbcTemplate ve TransactionTemplate istedikleri her bağlantıyı kullanabilirmiş gibi görünür.

Dahili olarak, Bahar (eğer ilgilenirsen, TransactionSynchronizationManager de bakabilirsiniz rağmen, korkutucu uyarılırsınız) işlemleri, bağlantılar ve datasources tüm düzgün senkronize emin olmak için karmaşık işlem senkronizasyon mantığı kullanır.

TransactionTemplate ve JdbcTemplate API'leri aracılığıyla çalıştığınız sürece, bu yalnızca herhangi bir çaba harcamadan çalışacaktır. Yine de, el ile DataSource arasındaki bağlantıları getirmeye başlarsanız, tüm bahisler kapalıdır.