Class 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
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      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> beginTransaction()  
      Future<com.google.appengine.api.datastore.Transaction> beginTransaction​(com.google.appengine.api.datastore.TransactionOptions options)  
      Future<Void> delete​(com.google.appengine.api.datastore.Key... keys)  
      Future<Void> delete​(com.google.appengine.api.datastore.Transaction txn, com.google.appengine.api.datastore.Key... keys)  
      Future<Void> delete​(com.google.appengine.api.datastore.Transaction txn, Iterable<com.google.appengine.api.datastore.Key> keys)  
      Future<Void> 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> getActiveTransactions()  
      com.google.appengine.api.datastore.Transaction getCurrentTransaction()  
      com.google.appengine.api.datastore.Transaction getCurrentTransaction​(com.google.appengine.api.datastore.Transaction txn)  
      Future<com.google.appengine.api.datastore.DatastoreAttributes> getDatastoreAttributes()  
      Future<Map<com.google.appengine.api.datastore.Index,​com.google.appengine.api.datastore.Index.IndexState>> getIndexes()  
      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)  
    • Constructor Detail

      • CachingAsyncDatastoreService

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

      • 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