У меня есть реализация DAO, которая использует HibernateTransactionManager для управления транзакциями, а приложение имеет 2 фабрики сеансов. Я получаю исключение в строке transactionManager.commit () ниже. Вызывает ли проблемы выполнение операций Hibernate в диспетчере транзакций, относящемся к другой фабрике сеансов?
TransactionStatus status = transactionManager.getTransaction(def);
try{
doHibernateStuff1(); //Does Hibernate stuff with session
//factory related to Tx Manager
doHibernateStuff2(); //Does Hibernate stuff with session
//factory not related to Tx Manager
}
catch(DataAccessException){
transactionManager.rollback(status);
}
transactionManager.commit(status); //Exception happens here.
Исключением является попытка снова выполнить операции в doHibernateStuff2(); в txManager.commit().
Если вы хотите предложить кладж и / или правильный способ справиться с этим, я был бы признателен.




Используете ли вы драйверы XA для подключения к двум источникам данных, участвующим в транзакции? Иначе работать не может.
Нет, net.sourceforge.jtds.jdbcx.JtdsDataSource - это класс драйвера jTDS XA; см. msdn.microsoft.com/en-us/library/aa342335(SQL.90).aspx для драйвера Microsoft XA. (Для последнего вам необходимо установить DLL.)
Почему вы используете драйверы jTDS и Microsoft? Почему не одно или другое?
Это была работа, которая была раньше, но я не думаю, что для этого есть причина.
jTDS - чистый тип IV; для драйвера XA не требуются библиотеки DLL.
Я знаю, что это старый вопрос, но я столкнулся с аналогичной проблемой. Я предполагаю, что у Брэндона есть 2 сеанса фабрики для разные источники данных, а он использует HibernateTransactionManager. И я считаю, что использование такого менеджера - проблема. Из того, что я читал, HibernateTransactionManager не может работать с двумя разными фабриками сеансов. Вместо этого ему следует использовать другой менеджер, например менеджер транзакций JTA. Но только если ему нужен доступ к обоим источникам данных в одной транзакции. В противном случае решение должно использовать дополнительный менеджер для каждой фабрики сеансов, как указано в приведенной ниже ссылке:
com.microsoft.jdbc.sqlserver.SQLServerDriver и net.sourceforge.jtds.jdbc.Driver; Не уверен, что это XA или нет.