Index: forgon-tools/src/main/java/com/forgon/system/concurrent/service/test/OptimisticLockManagerTest.java =================================================================== diff -u -r23797 -r23800 --- forgon-tools/src/main/java/com/forgon/system/concurrent/service/test/OptimisticLockManagerTest.java (.../OptimisticLockManagerTest.java) (revision 23797) +++ forgon-tools/src/main/java/com/forgon/system/concurrent/service/test/OptimisticLockManagerTest.java (.../OptimisticLockManagerTest.java) (revision 23800) @@ -12,6 +12,7 @@ public interface OptimisticLockManagerTest { public static final String ENTITY_OPTIMISTICLOCKTEST = "OptimisticLockTest"; + public static final String ENTITY_OPTIMISTICLOCKTEST_2 = "OptimisticLockTest2"; public void requestLockById(String entity, String id, WaitObject notifyObject, WaitObject continueObject); Index: forgon-tools/src/main/java/com/forgon/system/concurrent/model/OptimisticLock.java =================================================================== diff -u -r23797 -r23800 --- forgon-tools/src/main/java/com/forgon/system/concurrent/model/OptimisticLock.java (.../OptimisticLock.java) (revision 23797) +++ forgon-tools/src/main/java/com/forgon/system/concurrent/model/OptimisticLock.java (.../OptimisticLock.java) (revision 23800) @@ -6,6 +6,8 @@ import java.util.Comparator; import java.util.Date; +import org.apache.commons.codec.binary.StringUtils; + import com.forgon.system.transaction.model.TransactionInfo; /** @@ -106,4 +108,35 @@ } }; + public static final Comparator ENTIYY_ID_COMPARATOR = new Comparator() { + @Override + public int compare(OptimisticLock o1, OptimisticLock o2) { + String e1 = o1.getEntity(); + String e2 = o2.getEntity(); + String s1 = o1.getId(); + String s2 = o2.getId(); + + if (e1 == null && e2 == null) { + } else if (e1 == null) { + return -1; + } else if (e2 == null) { + return 1; + } else { + if (!StringUtils.equals(e1, e2)) { + return e1.compareTo(e2); + } + } + + if (s1 == null && s2 == null) { + return 0; + } else if (s1 == null) { + return -1; + } else if (s2 == null) { + return 1; + } else { + return s1.compareTo(s2); + } + } + }; + } Index: forgon-tools/src/main/java/com/forgon/system/concurrent/service/OptimisticLockManager.java =================================================================== diff -u -r23797 -r23800 --- forgon-tools/src/main/java/com/forgon/system/concurrent/service/OptimisticLockManager.java (.../OptimisticLockManager.java) (revision 23797) +++ forgon-tools/src/main/java/com/forgon/system/concurrent/service/OptimisticLockManager.java (.../OptimisticLockManager.java) (revision 23800) @@ -152,7 +152,7 @@ locks.addAll(entityLocksInfo.getAllLocks()); } } - Collections.sort(locks, OptimisticLock.ID_COMPARATOR); + Collections.sort(locks, OptimisticLock.ENTIYY_ID_COMPARATOR); return locks; } }