Мой вопрос связан с транзакциями и исключениями
Требования:
У меня есть 10 записей для вставки в таблицу базы данных. И после вставки каждой записи я вставляю данные в другую таблицу. Поэтому, если вставка во вторую таблицу не удалась, я хочу откатить эту запись.
Ex.
Скажем, обрабатывать денежные переводы (с одного счета на счет) для 10 человек одновременно.
псевдокод:
------------- Запуск метода EJB
for(int i = 0; i < TransferRecords.length; i++)
{
try
{
//Deduct cash from TransferRecord.accountFrom --- Includes use of Hibernate Session
//Add cash in TransferRecord.accountTo -- Includes use of Hibernate Session
} catch(AppException exception)
{
//Rollback the transaction only for this particular transfer (i)
// But here when I go for next record it says session is closed
}
}
--------- Конец метода EJB
Здесь AppException создается с аннотацией @ApplicaitonException (rollback = true).
Функциональность, которую мы хотим: даже если транзакция завершится неудачно для TransferRecord (скажем, 2), я хочу, чтобы данные были зафиксированы для записи 0, записи 1, записи 3, записи 4 (и т. Д.), Но не для записи 2)
Но проблема здесь в следующем: когда происходит сбой TransferRecord 2 и когда я перехожу на TransferRecord 3, я получаю ошибку «Session Closed».
Мои сомнения:
1. Это правильный подход? или я должен запустить цикл for (для каждого TransferRecord) за пределами EJB
2. Как я могу убедиться, что сессия не закрыта, но транзакция откатывается (только для этой конкретной неудачной транзакции)
Заранее спасибо.
Я использую EJB3, Hibernate 3.x, Jboss 4.2.x и использую транзакцию, управляемую контейнером.