Я использую распределенную серверную среду с серверами Weblogic 12, настроенными на 2 разных хостах. Два хоста указывают на одну и ту же схему базы данных DB2. На обоих серверах развернуто одно и то же приложение EAR. Я использую OpenJPA 1.2 для сопоставления класса с определенной таблицей базы данных. Для объекта я определил GenerationType.SEQUENCE, сопоставленный с соответствующим именем последовательности в базе данных.
@Entity
@Table(name="ART", uniqueConstraints=@Unique(columnNames="TITLE"))
@SequenceGenerator(name="ArticleSeq", sequenceName="ART_SEQ", initialValue=1,
allocationSize=1)
public class Article {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="ArticleSeq")
private long id;
...
}
Значение последовательности «ART_SEQ» в базе данных в настоящее время равно 150. Все запросы, которые обрабатываются на сервере A, получают правильное следующее значение для последовательности, то есть 151. Но запросы, которые обрабатываются на сервере B, получают следующее значение. для последовательности, начинающейся с 1.
Я не использую OpenJPA DateCache. Также я читал, что только начиная с OpenJPA 2.2.0 значения последовательности кэшируются в памяти jvm.
Что может быть причиной того, что на сервере B все вставки в БД используют значение последовательности, начинающееся с 1, которое не удается вставить из-за нарушения ограничений?