2011-08-28 14 views
5

Non sono abbastanza sicuro di come formulare la domanda, quindi sentitevi liberi di dirmi che sto pensando completamente male.JDBCTemplate con TransactionTemplate e Connection Pool, quale origine dati utilizzare

Desidero utilizzare JdbcTemplate e TransactionTemplate. Ricomincio iniziando il mio pool di connessioni come origine dati e creando anche un gestore transazioni come origine dati?

 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); 

Ma ora voglio creare la mia TransactionTemplate e JdbcTemplate:

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

Ora discussioni mulitple accedere transactionTemplate e jdbc. Questo codice garantisce che tutto ciò che viene fatto in doInTransaction utilizza la stessa connessione per tutte le chiamate jdbc?

La connessione è in qualche modo collegata internamente, poiché sembra che JdbcTemplate e TransactionTemplate possano utilizzare la connessione che desiderano. Il mio codice è corretto/salvo?

risposta

5

Questo dovrebbe essere tutto a posto. La parte fondamentale è che JdbcTemplate e DataSourceTransactionManager vengono forniti con lo stesso oggetto DataSource, che è stato eseguito.

Questo codice garantisce che tutto in doInTransaction utilizza la stessa connessione per tutte le chiamate jdbc? La connessione è in qualche modo collegata internamente, perché sembra che JdbcTemplate e TransactionTemplate possano utilizzare ogni connessione che desiderano.

Internamente, Primavera utilizza logica di sincronizzazione complessa operazione per assicurarsi che le transazioni, le connessioni e le origini dati sono tutti correttamente sincronizzati (se siete interessati, dare un'occhiata al TransactionSynchronizationManager, anche se essere avvertito, è temibile).

Finché si opera tramite le API TransactionTemplate e JdbcTemplate, funzionerà senza alcuno sforzo da parte dell'utente. Se si avvia manualmente il recupero delle connessioni dallo stesso DataSource, allora tutte le scommesse sono disattivate.

Problemi correlati