我们有一个无状态的ejb,它将一些数据保存在面向对象的数据库中。不幸的是,今天我们的持久性对象由于某些未知原因而没有唯一的密钥,并且今天也无法改变PO。
所以我们决定同步代码。然后我们检查是否有一个已经持有该名称的对象(我们认为应该是唯一的)。然后我们决定坚持与否。
后来我们意识到代码部署在一个有三个jboss实例的集群上。
任何人都可以建议一个不允许持久保存具有相同名称的对象的想法。
答案 0 :(得分:0)
如果你在JBoss集群后面有一个数据库,你可以在列中应用一个唯一的约束(我假设它是一个SQL数据库):
ALTER TABLE your_table ADD CONSTRAINT unique_name UNIQUE (column_name);
然后在应用程序代码中,您可能希望捕获SQL异常并让用户知道他们需要再次尝试。
更新
如果你不能改变数据库模式,那么你可以通过在插入之前执行SELECT查询以检查重复的条目来实现相同的结果,如果你担心同时发生2次插入,你可以看看应用WRITE_LOCK有问题的行