Здравствуйте. Прошу разъяснить особенности работы hibernate при использовании нескольких потоков.
Пример: есть функция покупки товара в интернет-магазине; если товар на складе есть в достаточном количестве, то осуществляется покупка. Код функции примерно такой:
Session session = sessionFactory.openSession();
try {
session.getTransaction().begin();
// запрос количества товара из БД;
// если товара меньше, чем нужно клиенту, то откат транзакции,
// в противном случае - успешное оформление покупки
session.getTransaction().commit();
}
catch ( Exception e ) {
if ( session.getTransaction().getStatus() == TransactionStatus.ACTIVE
|| session.getTransaction().getStatus() == TransactionStatus.MARKED_ROLLBACK ) {
session.getTransaction().rollback();
}
}
finally {
session.close();
}
Проблема возникает при тестировании функции.
1. Если тест однопоточный, то всё отрабатывает нормально и товар при покупке списывается со склада в количестве, соразмерном количеству покупок.
2. Если вызов функции покупки товара запустить в нескольких потоках (имитация работы web-клиента), то товар будет покупаться столько раз, сколько потоков запущено, но спишется со склада только один раз.
3. Если в тесте добавить паузу между запусками потоков, например 1 сек
for (Thread thread : threads){
Thread.sleep(1000);
thread.start();
}
то тест отрабатывает нормально, то есть количество списываний товара со склада соразмерно числу покупок.
Вопрос: как устранить ошибку множественных покупок в многопоточном тесте?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
На странице есть много текстовых полей и среди них есть поле с типом file, для загрузки pdf файла
Как сделать так, чтобы при прокрутке страницы вниз больше чем на 50px от верха, показывался элемент с классом "main-mai-logo"
ребят надо мне написать расширение которое показывает ip пользователя я написал вот так