Проблема Spring DatasourceTransaction Manager - PullRequest
0 голосов
/ 25 апреля 2009
final DataSource ds = DataSourceLocator.getInstance()
    .getDataSource(sg.cmpl.starhub.lprs.Constants.APP_KEY);
final DataSourceTransactionManager txManager = new DataSourceTransactionManager();
txManager.setDataSource(ds);

final DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
final TransactionStatus status = txManager.getTransaction(def);

Connection conn = null;
PreparedStatement ps = null;

try {

    /***************************************************************************/
    conn = DataSourceUtils.getConnection(ds);
    ps = conn.prepareStatement(sql);
    ps.execute();
    /***************************************************************************/

    txManager.commit(status);

} catch (Exception e) {
    txManager.rollback(status);
} 

Что-то не так с моей логикой диспетчера транзакций? Это выглядит нестабильно. Когда я вставляю новые данные, в первый раз, кажется, что сохранить, а позже я не могу найти данные в базе данных MySQL. Пожалуйста помоги. Большое спасибо.

Ответы [ 3 ]

1 голос
/ 09 июля 2009

Предполагая, что есть особая причина, по которой вы хотите заниматься программным подключением и управлением транзакциями, я предлагаю взглянуть на JdbcTemplate Spring и обернуть его использование в TransactionTemplate.

Однако, как указано в предыдущем комментарии, вы должны стараться по возможности избегать программного управления транзакциями и использовать аннотации (@Transactional) или конфигурацию XML (TransactionProxyFactoryBean или <tx:advice/>).

0 голосов
/ 24 сентября 2012

В качестве примечания: согласно документации Spring, если операция фиксации завершается неудачно с TransactionException, тогда откат уже был вызван, и повторный вызов в блоке catch вызовет исключение IllegalTransactionStateException.

0 голосов
/ 25 апреля 2009

Да, что-то не так. Это не весенний путь. Вы не должны помещать логику коммита / отката в такой код. Преимущество приходит, когда вы можете сделать это декларативно, в конфигурации.

Посмотрите справочные документы по транзакциям Spring .

...