了解CacheWriterAdapter的回调方法是如何工作的

时间:2018-02-01 20:58:13

标签: java spring-boot gemfire spring-data-gemfire

Spring Boot Version - 1.5.2,

Gemfire版本 - 8.2.6(覆盖托管版本8.2.2),

RegionType - PARTITION_REDUNDANT,

代理 - ClientRegionShortcut.PROXY,

数据库 - Cassandra

我们正在扩展CacheWriterAdapter并覆盖beforeCreate(),beforeUpdate(),beforeDestroy()。我们使用JAVA连接到远程gemfire服务器。

@Bean(name = GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME)
ClientCache gemfireCache(@Qualifier("gemfireProperties") Properties gemfireProperties,
        @Value("${gemfire.locator1:localhost}") String locatorHost,
        @Value("${gemfire.port1:10334}") int locatorPort) {

    ClientCache gemfireCache = new ClientCacheFactory(gemfireProperties).addPoolLocator(locatorHost, locatorPort)
            .setPdxSerializer(pdxSerializer()).setPdxReadSerialized(false).create();

    return gemfireCache;
}

但是每次调用beforeCreate()之前都要进行HTTP GET,PUT和POST。但是对于HTTP DELETE,调用beforeDestroy()。我们还尝试从com / gemstone / gemfire / cache / Operation打印布尔值,详细分析在底部。 我们想了解

  • 为什么从不调用beforeUpdate
  • 为什么isGet,当gemfire缓存中存在数据时,isgontanisKey对于HTTP GET操作是错误的
  • 为什么对于HTTP POST操作,isCreate为false
  • 为什么isUpdate对于hTTP PUT操作是错误的
  • 为什么不为HTTP PUT操作提取旧值

情景-1 Gemfire - 没有记录

Cassandra - 记录可用

测试用例 - 使用现有数据调用HTTP GET服务,该数据在Cassandra中不在Gemfire中可用

结果 - 首先调用缓存加载器,然后调用CacheWriterAdapter的beforeCreate(),其操作为Local_LOAD_CREATE

getNewValue-提取对象

getOldValue- null

IsLoad真

IsLocalLoad真

IsLocal假

isGetEntry假

isSearchOrLoad真

isUpdate假

怡创真

isDestroy假

isGet假

isGetEntry假

isContainsKey假

isContainsValue假

isContainsValueForKey假

情景-2

Gemfire - 可录制

Cassandra - 记录可用

测试用例 - 使用Cassandra和Gemfire中可用的现有数据调用的HTTP GET服务

结果 - 调用CacheWriterAdapter的beforeCreate(),其操作为Local_LOAD_CREATE

getNewValue-提取对象

getOldValue- null

IsLoad - 真

IsLocalLoad真

IsLocal假

isGetEntry假

isSearchOrLoad真

isUpdate假

怡创真

isDestroy假

isGet假

isGetEntry假

isContainsKey假

isContainsValue假

isContainsValueForKey假

情景-3

Gemfire - 没有可用记录

Cassandra - 没有可用的记录

测试用例 - 使用Cassandra和Gemfire中不存在的新数据集调用HTTP PostOperation

结果 - 调用CacheWriterAdapter的beforeCreate(),其操作为CREATE

getNewValue-提取对象

getOldValue- null

IsLoad - 假

IsLocalLoad假

IsLocal假

isGetEntry假

isNetLoad假

isSearchOrLoad假

isUpdate假

怡创真

isDestroy假

isGet假

isGetEntry假

isContainsKey假

isContainsValue假

isContainsValueForKey假

isInvalidate假

情景-4

Gemfire - 可录制

Cassandra - 记录可用

应用程序 - 使用Cassandra和Gemfire中提供的现有数据调用HTTP PutOperation

结果 - 调用CacheWriterAdapter的beforeCreate(),其操作为CREATE

getNewValue-提取对象

getOldValue- null

IsLoad - 假

IsLocalLoad假

IsLocal假

isGetEntry假

isNetLoad假

isSearchOrLoad假

isUpdate假

怡创真

isDestroy假

isGet假

isGetEntry假

isContainsKey假

isContainsValue假

isContainsValueForKey假

isInvalidate假

情景-5

Gemfire - 可录制

Cassandra - 记录可用

应用程序 - 使用Cassandra和Gemfire中提供的现有IMEI调用HTTP DeleteOperation

结果 - 调用CacheWriterAdapter的beforeDestroy(),操作为DESTROY。

getNewValue-提取对象

getOldValue- null

IsLoad - 假

IsLocalLoad假

IsLocal假

isGetEntry假

isNetLoad假

isSearchOrLoad假

isUpdate假

怡创假

isDestroy真

isGet假

isGetEntry假

isContainsKey假

isContainsValue假

isContainsValueForKey假

isInvalidate假

这是正确的行为吗?

0 个答案:

没有答案