您可以通过在 ObjectGrid 描述符 XML 文件中定义 BackingMap 或 ObjectMap 对象的 CopyMode 属性来调整副本数。
对于 Java™ 应用程序,可通过定义 BackingMap 或 ObjectMap 对象的 CopyMode 属性来调整副本数。
![]()
对于 .NET 应用程序,仅支持 COPY_TO_BYTES 方式。
当您将 NO_COPY 属性值用于可更新的映射时,请谨慎。WebSphere® eXtreme Scale 在第一次接触时使用副本以允许事务回滚。应用程序仅更改副本,因此,eXtreme Scale 会废弃副本。 如果使用 NO_COPY 属性值,且应用程序修改了落实的值,那么不可能完成回滚。修改落实的值会导致索引和复制等出现问题,这是因为事务落实时索引和副本会更新。如果修改落实的数据,然后回滚事务(实际不会回滚),那么不会更新索引,且不会进行复制。其他线程会立即发现未落实的更改,即使它们具有锁定也是如此。将 NO_COPY 属性值用于只读映射或应用程序,这些应用程序在修改该值之前完成相应副本。如果使用 NO_COPY 属性值,并就数据完整性问题致电 IBM® 支持,那么会要求您将复制方式设置为 COPY_ON_READ_AND_COMMIT 来重现该问题。
COPY_TO_BYTES 值以序列化形式在映射中存储值。在读取时,eXtreme Scale 会扩充序列化形式的值,在落实时,会以序列化形式存储值。使用此方法,在读取和落实时都会生成副本。
将乐观锁定与 COPY_TO_BYTES 配合使用时,您可能会在常用操作(例如使高速缓存条目失效)期间遇到 ClassNotFoundException 异常。因为乐观锁定机制必须调用高速缓存对象的 equals() 方法以检测落实事务之前的任何更改,所以会发生这些异常。要调用 equals() 方法,eXtreme Scale 服务器必须能够反序列化高速缓存对象,这表示 eXtreme Scale 必须装入对象类。
要解决这些异常,可以打包高速缓存的对象类,以便 eXtreme Scale 服务器可以在独立环境中装入类。因此,必须将这些类放入类路径中。
如果您的环境包括 OSGi 框架,请将这些类打包到 objectgrid.jar 捆绑软件的一个片段中。如果要在 库概要文件 中运行 eXtreme Scale 服务器,请将这些类打包成 OSGi 捆绑软件并导出这些类的 Java 包。然后,通过将该捆绑软件复制到 grids 目录进行安装。
在 WebSphere Application Server 中,请将这些类打包到应用程序或应用程序可以访问的共享库中。
此外,您可以使用定制序列化器,该序列化器可以比较存储在 eXtreme Scale 中的字节数组以检测任何更改。
可以在 BackingMap 对象上配置映射的缺省复制方式。您还可以通过使用 ObjectMap.setCopyMode 方法更改映射上的复制方式,再启动事务。
<cc:backingMap name="RuntimeLifespan" copyMode="NO_COPY"/>