Я получаю исключение DataIntegrity, генерируемое в следующем сценарии:
У меня два веб-приложения, оба запущены на одном физическом сервере - одно работает в веб-контейнере Tomcat6, а другое - в Glassfish3.Оба приложения пишут в одну и ту же базу данных MySQL.Приложение Tomcat использует Spring Hibernate, а приложение Glassfish использует Hibernate.
Проблема заключается в следующем:
Приложение Glassfish записывает в TableA
в общей базе данных запись, вставляя новую строку в Table
A, которая имеет первичный ключ с автоинкрементным увеличением.
например,
Transaction tx = session.beginTransaction();
session.save(issue);
tx.commit();
Пока это происходит, приложение tomcat уже имеет открытое окно и затем нажимает кнопку Submit в этом окне, чтобы также вставить строку в TableA.
например,
getHibernateTemplate().saveOrUpdate(itr.next());
Это вызывает следующее исключение:
Caused by: java.sql.BatchUpdateException: null, message from server: "Duplicate entry '56' for key 'PRIMARY'"
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1404)
at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
... 57 more
WARN [RequestProcessor:516] Unhandled Exception thrown: class org.springframework.dao.DataIntegrityViolationException
Есть ли у кого-нибудь какие-либо рекомендации относительно того, как управлять сеансамичерез несколько приложений, работающих в разных веб-контейнерах?Похоже, у меня нет таких же проблем, если в одну и ту же таблицу в одно и то же приложение заносятся 2 записи ...