Class CachingAsyncDatastoreService

java.lang.Object
com.googlecode.objectify.cache.CachingAsyncDatastoreService
All Implemented Interfaces:
com.google.appengine.api.datastore.AsyncDatastoreService, com.google.appengine.api.datastore.BaseDatastoreService

public class CachingAsyncDatastoreService
extends Object
implements com.google.appengine.api.datastore.AsyncDatastoreService

A write-through memcache for Entity objects that works for both transactional and nontransactional sessions.

  • Caches negative results as well as positive results.
  • Queries do not affect the cache in any way.
  • Transactional reads bypass the cache, but successful transaction commits will update the cache.
  • This cache has near-transactional integrity. As long as DeadlineExceededException is not hit, cache should not go out of sync even under heavy contention.

Note: Until Google adds a hook that lets us wrap native Future implementations, you muse install the AsyncCacheFilter to use this cache asynchronously. This is not necessary for synchronous use of CachingDatastoreService, but asynchronous operation requires an extra hook for the end of a request when fired-and-forgotten put()s and delete()s get processed. If you use this cache asynchronously, and you do not use the AsyncCacheFilter, your cache will go out of sync.

Author:
Jeff Schnitzer
  • Constructor Summary

    Constructors
    Constructor
    Description
    CachingAsyncDatastoreService​(com.google.appengine.api.datastore.AsyncDatastoreService rawAsync, EntityMemcache memcache)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    Future<com.google.appengine.api.datastore.KeyRange>
    allocateIds​(com.google.appengine.api.datastore.Key parent, String kind, long num)
     
    Future<com.google.appengine.api.datastore.KeyRange>
    allocateIds​(String kind, long num)
     
    Future<com.google.appengine.api.datastore.Transaction>
     
    Future<com.google.appengine.api.datastore.Transaction>
    beginTransaction​(com.google.appengine.api.datastore.TransactionOptions options)
     
    delete​(com.google.appengine.api.datastore.Key... keys)
     
    delete​(com.google.appengine.api.datastore.Transaction txn, com.google.appengine.api.datastore.Key... keys)
     
    delete​(com.google.appengine.api.datastore.Transaction txn, Iterable<com.google.appengine.api.datastore.Key> keys)
     
    delete​(Iterable<com.google.appengine.api.datastore.Key> keys)
     
    Future<com.google.appengine.api.datastore.Entity>
    get​(com.google.appengine.api.datastore.Key key)
     
    Future<com.google.appengine.api.datastore.Entity>
    get​(com.google.appengine.api.datastore.Transaction txn, com.google.appengine.api.datastore.Key key)
     
    Future<Map<com.google.appengine.api.datastore.Key,​com.google.appengine.api.datastore.Entity>>
    get​(com.google.appengine.api.datastore.Transaction txn, Iterable<com.google.appengine.api.datastore.Key> keys)
     
    Future<Map<com.google.appengine.api.datastore.Key,​com.google.appengine.api.datastore.Entity>>
    get​(Iterable<com.google.appengine.api.datastore.Key> keys)
     
    Collection<com.google.appengine.api.datastore.Transaction>
     
    com.google.appengine.api.datastore.Transaction
     
    com.google.appengine.api.datastore.Transaction
    getCurrentTransaction​(com.google.appengine.api.datastore.Transaction txn)
     
    Future<com.google.appengine.api.datastore.DatastoreAttributes>
     
    Future<Map<com.google.appengine.api.datastore.Index,​com.google.appengine.api.datastore.Index.IndexState>>
     
    com.google.appengine.api.datastore.PreparedQuery
    prepare​(com.google.appengine.api.datastore.Query query)
     
    com.google.appengine.api.datastore.PreparedQuery
    prepare​(com.google.appengine.api.datastore.Transaction txn, com.google.appengine.api.datastore.Query query)
     
    Future<com.google.appengine.api.datastore.Key>
    put​(com.google.appengine.api.datastore.Entity entity)
     
    Future<com.google.appengine.api.datastore.Key>
    put​(com.google.appengine.api.datastore.Transaction txn, com.google.appengine.api.datastore.Entity entity)
     
    Future<List<com.google.appengine.api.datastore.Key>>
    put​(com.google.appengine.api.datastore.Transaction txn, Iterable<com.google.appengine.api.datastore.Entity> entities)
     
    Future<List<com.google.appengine.api.datastore.Key>>
    put​(Iterable<com.google.appengine.api.datastore.Entity> entities)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • CachingAsyncDatastoreService

      public CachingAsyncDatastoreService(com.google.appengine.api.datastore.AsyncDatastoreService rawAsync, EntityMemcache memcache)
  • Method Details

    • allocateIds

      public Future<com.google.appengine.api.datastore.KeyRange> allocateIds(String kind, long num)
      Specified by:
      allocateIds in interface com.google.appengine.api.datastore.AsyncDatastoreService
    • allocateIds

      public Future<com.google.appengine.api.datastore.KeyRange> allocateIds(com.google.appengine.api.datastore.Key parent, String kind, long num)
      Specified by:
      allocateIds in interface com.google.appengine.api.datastore.AsyncDatastoreService
    • beginTransaction

      public Future<com.google.appengine.api.datastore.Transaction> beginTransaction()
      Specified by:
      beginTransaction in interface com.google.appengine.api.datastore.AsyncDatastoreService
    • beginTransaction

      public Future<com.google.appengine.api.datastore.Transaction> beginTransaction(com.google.appengine.api.datastore.TransactionOptions options)
      Specified by:
      beginTransaction in interface com.google.appengine.api.datastore.AsyncDatastoreService
    • delete

      public Future<Void> delete(com.google.appengine.api.datastore.Key... keys)
      Specified by:
      delete in interface com.google.appengine.api.datastore.AsyncDatastoreService
    • delete

      public Future<Void> delete(Iterable<com.google.appengine.api.datastore.Key> keys)
      Specified by:
      delete in interface com.google.appengine.api.datastore.AsyncDatastoreService
    • delete

      public Future<Void> delete(com.google.appengine.api.datastore.Transaction txn, com.google.appengine.api.datastore.Key... keys)
      Specified by:
      delete in interface com.google.appengine.api.datastore.AsyncDatastoreService
    • delete

      public Future<Void> delete(com.google.appengine.api.datastore.Transaction txn, Iterable<com.google.appengine.api.datastore.Key> keys)
      Specified by:
      delete in interface com.google.appengine.api.datastore.AsyncDatastoreService
    • get

      public Future<com.google.appengine.api.datastore.Entity> get(com.google.appengine.api.datastore.Key key)
      Specified by:
      get in interface com.google.appengine.api.datastore.AsyncDatastoreService
    • get

      public Future<Map<com.google.appengine.api.datastore.Key,​com.google.appengine.api.datastore.Entity>> get(Iterable<com.google.appengine.api.datastore.Key> keys)
      Specified by:
      get in interface com.google.appengine.api.datastore.AsyncDatastoreService
    • get

      public Future<com.google.appengine.api.datastore.Entity> get(com.google.appengine.api.datastore.Transaction txn, com.google.appengine.api.datastore.Key key)
      Specified by:
      get in interface com.google.appengine.api.datastore.AsyncDatastoreService
    • get

      public Future<Map<com.google.appengine.api.datastore.Key,​com.google.appengine.api.datastore.Entity>> get(com.google.appengine.api.datastore.Transaction txn, Iterable<com.google.appengine.api.datastore.Key> keys)
      Specified by:
      get in interface com.google.appengine.api.datastore.AsyncDatastoreService
    • getActiveTransactions

      public Collection<com.google.appengine.api.datastore.Transaction> getActiveTransactions()
      Specified by:
      getActiveTransactions in interface com.google.appengine.api.datastore.BaseDatastoreService
    • getCurrentTransaction

      public com.google.appengine.api.datastore.Transaction getCurrentTransaction()
      Specified by:
      getCurrentTransaction in interface com.google.appengine.api.datastore.BaseDatastoreService
    • getCurrentTransaction

      public com.google.appengine.api.datastore.Transaction getCurrentTransaction(com.google.appengine.api.datastore.Transaction txn)
      Specified by:
      getCurrentTransaction in interface com.google.appengine.api.datastore.BaseDatastoreService
    • prepare

      public com.google.appengine.api.datastore.PreparedQuery prepare(com.google.appengine.api.datastore.Query query)
      Specified by:
      prepare in interface com.google.appengine.api.datastore.BaseDatastoreService
    • prepare

      public com.google.appengine.api.datastore.PreparedQuery prepare(com.google.appengine.api.datastore.Transaction txn, com.google.appengine.api.datastore.Query query)
      Specified by:
      prepare in interface com.google.appengine.api.datastore.BaseDatastoreService
    • put

      public Future<com.google.appengine.api.datastore.Key> put(com.google.appengine.api.datastore.Entity entity)
      Specified by:
      put in interface com.google.appengine.api.datastore.AsyncDatastoreService
    • put

      public Future<List<com.google.appengine.api.datastore.Key>> put(Iterable<com.google.appengine.api.datastore.Entity> entities)
      Specified by:
      put in interface com.google.appengine.api.datastore.AsyncDatastoreService
    • put

      public Future<com.google.appengine.api.datastore.Key> put(com.google.appengine.api.datastore.Transaction txn, com.google.appengine.api.datastore.Entity entity)
      Specified by:
      put in interface com.google.appengine.api.datastore.AsyncDatastoreService
    • put

      public Future<List<com.google.appengine.api.datastore.Key>> put(com.google.appengine.api.datastore.Transaction txn, Iterable<com.google.appengine.api.datastore.Entity> entities)
      Specified by:
      put in interface com.google.appengine.api.datastore.AsyncDatastoreService
    • getDatastoreAttributes

      public Future<com.google.appengine.api.datastore.DatastoreAttributes> getDatastoreAttributes()
      Specified by:
      getDatastoreAttributes in interface com.google.appengine.api.datastore.AsyncDatastoreService
    • getIndexes

      public Future<Map<com.google.appengine.api.datastore.Index,​com.google.appengine.api.datastore.Index.IndexState>> getIndexes()
      Specified by:
      getIndexes in interface com.google.appengine.api.datastore.AsyncDatastoreService