It seems I am expecting the wrong thing from JBoss cache. It seems like the purpose of a cache loader is to provide additional storage for the in-memory cache, not to persist everything in the cache in real time. As a result, the only data that is written to the cache is that data that could not fit in memory and was evicted. I was able to get my above test to pass by adding a line: cache.evict(Fqn.ROOT, true); before cache.stop() but this does not mean that I can achieve the behavior I am looking for. I would like transactions to be "acid", meaning that they are persisted to disk when a transaction completes. If the only way I can force a write to disk is to evict my node from the cache, then this defeats the purpose of the cache. Am I missing something or do I understand this correctly?