Исключение DataIntegrity с несколькими контейнерами веб-приложений и 1 базой данных - PullRequest
0 голосов
/ 19 апреля 2011

Я получаю исключение 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 записи ...

...