Извините за титул, я не мог решить, как выразить эту проблему.hibernate locks row on seproate projects with spring transactional service
У меня есть 2 проекта, которые используют ту же самую базу данных ms sql server. Оба являются весенними проектами, а весна - транзакциями.
В одной ситуации первый проект создает объект объекта, а затем отправляет его идентификатор другому проекту с сервисом отдыха. Такие, как:
Message message = new Message();
<filling message's properties>
sessionFactory.getCurrentSession().save(message);
String url = <proper url>
MultiValueMap<String, String> mvm = new LinkedMultiValueMap<String, String>();
mvm.add("id", message.getId());
String response = restTemplate.postForObject(url, mvm, String.class);
message.setStatus("Send to service");
sessionFactory.getCurrentSession().saveOrUpdate(message);
restTemplate.postForObject успешно отправляет необходимые данные на отдых обслуживание и сервис, как следует:.
Message message = (Message) sessionFactory.getCurrentSession().get(Message.class, id);
message.setSendingTime(new Date());
kepMesajDAO.merge(message);
<message process>
Но проблема «sessionFactory.getCurrentSession() получить (Message.class, id) «Метод не возвращает результат, на самом деле программа там заблокирована.
Я думаю, что hibernate блокирует мой сохраненный объект, а второй проект ждет разблокировки, но поскольку первый проект ждет ответа от второго проекта, он никогда не разблокируется.
Как справиться с этой ситуацией.
PS. Я попытался закрыть или отключить соединение в первом проекте я получил исключение из весны, такие как:
Caused by: org.hibernate.TransactionException: commit failed
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:185)
at org.springframework.orm.hibernate4.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:480)
... 44 more
Caused by: org.hibernate.TransactionException: unable to commit against JDBC connection
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doCommit(JdbcTransaction.java:116)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:178)
... 45 more
Caused by: java.sql.SQLException: Connection is closed.
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.checkOpen(PoolingDataSource.java:175)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.commit(PoolingDataSource.java:199)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doCommit(JdbcTransaction.java:112)
... 46 more
эти два вызова находятся на разных классах, после сохранения я вызываю метод, называемый sendToRest из разных компонентов, а остальная часть кода относится к этому методу. – bdogru
Не могли бы вы расширить свой вопрос? Какую стратегию вы выбрали для управления сеансами спящего режима, т. Е. Какой тип CurrentSessionContext активен? Связаны ли ваши сеансы с транзакцией JTA, threadlocal, ...? – Hille