您可以在 WebSphere® eXtreme Scale 配置中的每一个 BackingMap 上定义乐观锁定策略、悲观锁定策略或“无”锁定策略。
要避免 java.lang.IllegalStateException 异常,必须先对 Objectgrid 实例调用 setLockStrategy 方法,再调用 initialize 或 getSession 方法。
import com.ibm.websphere.objectgrid.BackingMap;
import com.ibm.websphere.objectgrid.LockStrategy;
import com.ibm.websphere.objectgrid.ObjectGrid;
import com.ibm.websphere.objectgrid.ObjectGridManagerFactory;
...
ObjectGrid og =
ObjectGridManagerFactory.getObjectGridManager().createObjectGrid("test");
BackingMap bm = og.defineMap("optimisticMap");
bm.setLockStrategy( LockStrategy.OPTIMISTIC );
import com.ibm.websphere.objectgrid.BackingMap;
import com.ibm.websphere.objectgrid.LockStrategy;
import com.ibm.websphere.objectgrid.ObjectGrid;
import com.ibm.websphere.objectgrid.ObjectGridManagerFactory;
...
ObjectGrid og =
ObjectGridManagerFactory.getObjectGridManager().createObjectGrid("test");
BackingMap bm = og.defineMap("pessimisticMap");
bm.setLockStrategy( LockStrategy.PESSIMISTIC);
import com.ibm.websphere.objectgrid.BackingMap;
import com.ibm.websphere.objectgrid.LockStrategy;
import com.ibm.websphere.objectgrid.ObjectGrid;
import com.ibm.websphere.objectgrid.ObjectGridManagerFactory;
...
ObjectGrid og =
ObjectGridManagerFactory.getObjectGridManager().createObjectGrid("test");
BackingMap bm = og.defineMap("noLockingMap");
bm.setLockStrategy( LockStrategy.NONE);
bm.setLockTimeout( 60 );
setLockTimeout 方法参数是一个 Java 原语整数,用于指定 eXtreme Scale 等待授予锁定方式的秒数。
如果事务等待的时间超过为 BackingMap 配置的锁定等待超时值,那么将产生 com.ibm.websphere.objectgrid.LockTimeoutException 异常。boolean ObjectMap.lock(Object key, LockMode lockMode);
List<Boolean> ObjectMap.lockAll(List keys, LockMode lockMode);
LockMode 是具有可能值的枚举,您可以在该方式下指定要锁定的键: session.begin();
map.lock(key, LockMode.UPGRADABLE);
map.upsert();
session.commit()