分布式weblogic服务器环境使用相同的DB2数据库和模式,但为OpenJPA实体获取不同的序列值

分布式weblogic服务器环境使用相同的DB2数据库和模式,但为OpenJPA实体获取不同的序列值,db2,weblogic,openjpa,Db2,Weblogic,Openjpa,我使用的是分布式服务器环境,Weblogic 12服务器安装在两台不同的主机上。 这两个主机指向相同的DB2数据库模式。两台服务器上部署了相同的应用程序EAR。 我使用OpenJPA1.2将一个类映射到一个特定的数据库表。在实体上,我定义了GenerationType.SEQUENCE,映射到数据库中的相关序列名称 @Entity @Table(name="ART", uniqueConstraints=@Unique(columnNames="TITLE")) @SequenceGenerat

我使用的是分布式服务器环境,Weblogic 12服务器安装在两台不同的主机上。 这两个主机指向相同的DB2数据库模式。两台服务器上部署了相同的应用程序EAR。 我使用OpenJPA1.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数据缓存。我还读到,仅从OpenJPA2.2.0开始,序列值就缓存在jvm内存中


在服务器B上,所有DB插入都使用从1开始的序列值,这可能是什么原因?由于违反了合同,插入失败?

问题在重新启动服务器B后得到解决。

您是否尝试重新启动服务器B?也许它已经运行了很长一段时间,并且持有一批旧的(不再有效的)密钥。两台服务器都是在2周前安装的。服务器A和B在重新部署应用程序后于本周重新启动。