Class ObjectifyFactory
- All Implemented Interfaces:
Forge
public class ObjectifyFactory extends Object implements Forge
Factory which allows us to construct implementations of the Objectify interface. You should usually use the ObjectifyService to access Objectify.
ObjectifyFactory is designed to be subclassed; much default behavior can be changed by overriding methods. In particular, see createObjectify(), construct(), getAsyncDatastoreService().
- Author:
- Jeff Schnitzer
-
Field Summary
Modifier and TypeFieldDescriptionprotected EntityMemcache
Manages caching of entities at a low level.protected Keys
Some useful bits for working with keysstatic String
Default memcache namespaceprotected EntityMemcacheStats
Tracks statsprotected Registrar
Encapsulates entity registration infoprotected Translators
All the various loaders -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescription<T> Key<T>
allocateId(Class<T> clazz)
Allocates a single id from the allocator for the specified kind.<T> Key<T>
allocateId(Object parentKeyOrEntity, Class<T> clazz)
Allocates a single id from the allocator for the specified kind.<T> com.google.appengine.api.datastore.DatastoreService.KeyRangeState
allocateIdRange(KeyRange<T> range)
Allocates a user-specified contiguous range of unique IDs, preventing the allocator from giving them out to entities (with autogeneration) or other calls to allocate methods.<T> KeyRange<T>
allocateIds(Class<T> clazz, long num)
Preallocate a contiguous range of unique ids within the namespace of the specified entity class.<T> KeyRange<T>
allocateIds(Object parentKeyOrEntity, Class<T> clazz, long num)
Preallocate a contiguous range of unique ids within the namespace of the specified entity class and the parent key.begin()
This is the beginning of any Objectify session.<T> T
Construct an instance of the specified type.<T extends Collection<?>>
TconstructCollection(Class<T> type, int size)
Construct a collection of the specified type and the specified size for use on a POJO field.<T extends Map<?, ?>>
TconstructMap(Class<T> type)
Construct a map of the specified type for use on a POJO field.com.google.appengine.api.datastore.AsyncDatastoreService
createAsyncDatastoreService(com.google.appengine.api.datastore.DatastoreServiceConfig cfg, boolean globalCache)
Get an AsyncDatastoreService facade appropriate to the options.protected EntityMemcache
Override this if you need special behavior from your EntityMemcacheprotected com.google.appengine.api.datastore.AsyncDatastoreService
createRawAsyncDatastoreService(com.google.appengine.api.datastore.DatastoreServiceConfig cfg)
You can override this to add behavior at the raw datastoreservice level.Get the object that tracks memcache stats.<T> EntityMetadata<T>
getMetadata(com.google.appengine.api.datastore.Key key)
<T> EntityMetadata<T>
getMetadata(Key<T> key)
<T> EntityMetadata<T>
getMetadata(Class<T> clazz)
<T> EntityMetadata<T>
getMetadata(String kind)
Gets metadata for the specified kind, returning null if nothing registered.<T> EntityMetadata<T>
getMetadataForEntity(T obj)
Named differently so you don't accidentally use the Object formGets the master list of all registered TranslatorFactory objects.keys()
Some tools for working with keys.<T> void
All POJO entity classes which are to be managed by Objectify must be registered first.void
setMemcacheErrorHandler(com.google.appengine.api.memcache.ErrorHandler handler)
Sets the error handler for the main memcache object.
-
Field Details
-
MEMCACHE_NAMESPACE
Default memcache namespace- See Also:
- Constant Field Values
-
registrar
Encapsulates entity registration info -
keys
Some useful bits for working with keys -
translators
All the various loaders -
memcacheStats
Tracks stats -
entityMemcache
Manages caching of entities at a low level. Lazily instantiated on the first register() of a cacheable entity.
-
-
Constructor Details
-
ObjectifyFactory
public ObjectifyFactory()
-
-
Method Details
-
createEntityMemcache
Override this if you need special behavior from your EntityMemcache -
construct
Construct an instance of the specified type. Objectify uses this method whenever possible to create instances of entities, condition classes, or other types; by overriding this method you can substitute Guice or other dependency injection mechanisms. By default it constructs with a simple no-args constructor.
-
constructCollection
Construct a collection of the specified type and the specified size for use on a POJO field. You can override this with Guice or whatnot.
The default is to call construct(Class), with one twist - if a Set, SortedSet, or List interface is presented, Objectify will construct a HashSet, TreeSet, or ArrayList (respectively). If you override this method with dependency injection and you use uninitialized fields of these interface types in your entity pojos, you will need to bind these interfaces to concrete types.
-
constructMap
Construct a map of the specified type for use on a POJO field. You can override this with Guice or whatnot.
The default is to call construct(Class), with one twist - if a Map or SortedMap List interface is presented, Objectify will construct a HashMap or TreeMap (respectively). If you override this method with dependency injection and you use uninitialized fields of these interface types in your entity pojos, you will need to bind these interfaces to concrete types.
-
createAsyncDatastoreService
public com.google.appengine.api.datastore.AsyncDatastoreService createAsyncDatastoreService(com.google.appengine.api.datastore.DatastoreServiceConfig cfg, boolean globalCache)Get an AsyncDatastoreService facade appropriate to the options. All Objectify datastore interaction goes through an AsyncDatastoreService. This might or might not produce a CachingAsyncDatastoreService.- Returns:
- an AsyncDatastoreService configured per the specified options.
-
createRawAsyncDatastoreService
protected com.google.appengine.api.datastore.AsyncDatastoreService createRawAsyncDatastoreService(com.google.appengine.api.datastore.DatastoreServiceConfig cfg)You can override this to add behavior at the raw datastoreservice level. -
begin
This is the beginning of any Objectify session. It creates an Objectify instance with the default options, unless you override this method to alter the options. You can also override this method to produce a wholly different Objectify implementation (possibly using ObjectifyWrapper).The default options are:
- Do NOT begin a transaction.
- DO use a global cache.
- Use STRONG consistency.
- Apply no deadline to calls.
Note that when using Objectify you will almost never directly call this method. Instead you should call the static ofy() method on ObjectifyService.
- Returns:
- a new Objectify instance
-
register
All POJO entity classes which are to be managed by Objectify must be registered first. This method must be called in a single-threaded mode sometime around application initialization.
Any extra translators must be added to the Translators *before* entity classes are registered.
Attempts to re-register entity classes are ignored.
-
getMemcacheStats
Get the object that tracks memcache stats. -
setMemcacheErrorHandler
public void setMemcacheErrorHandler(com.google.appengine.api.memcache.ErrorHandler handler)Sets the error handler for the main memcache object. -
getMetadata
- Returns:
- the metadata for a kind of typed object
- Throws:
IllegalArgumentException
- if the kind has not been registered
-
getMetadata
public <T> EntityMetadata<T> getMetadata(com.google.appengine.api.datastore.Key key) throws IllegalArgumentException- Returns:
- the metadata for a kind of entity based on its key
- Throws:
IllegalArgumentException
- if the kind has not been registered
-
getMetadata
- Returns:
- the metadata for a kind of entity based on its key
- Throws:
IllegalArgumentException
- if the kind has not been registered
-
getMetadata
Gets metadata for the specified kind, returning null if nothing registered. This method is not like the others because it returns null instead of throwing an exception if the kind is not found.- Returns:
- null if the kind is not registered.
-
getMetadataForEntity
Named differently so you don't accidentally use the Object form- Returns:
- the metadata for a kind of typed object.
- Throws:
IllegalArgumentException
- if the kind has not been registered
-
allocateId
Allocates a single id from the allocator for the specified kind. Safe to use in concert with the automatic generator. This is just a convenience method for allocateIds().- Parameters:
clazz
- must be a registered entity class with a Long or long id field.- Returns:
- a key with an id that is unique to the kind
-
allocateId
Allocates a single id from the allocator for the specified kind. Safe to use in concert with the automatic generator. This is just a convenience method for allocateIds(). Note that the id is only unique within the parent, not across the entire kind.- Parameters:
parentKeyOrEntity
- must be a legitimate parent for the class type. It need not point to an existent entity, but it must be the correct type for clazz.clazz
- must be a registered entity class with a Long or long id field, and a parent key of the correct type.- Returns:
- a key with a new id unique to the kind and parent
-
allocateIds
Preallocate a contiguous range of unique ids within the namespace of the specified entity class. These ids can be used in concert with the normal automatic allocation of ids when put()ing entities with null Long id fields.- Parameters:
clazz
- must be a registered entity class with a Long or long id field.num
- must be >= 1 and <= 1 billion
-
allocateIds
Preallocate a contiguous range of unique ids within the namespace of the specified entity class and the parent key. These ids can be used in concert with the normal automatic allocation of ids when put()ing entities with null Long id fields.- Parameters:
parentKeyOrEntity
- must be a legitimate parent for the class type. It need not point to an existent entity, but it must be the correct type for clazz.clazz
- must be a registered entity class with a Long or long id field, and a parent key of the correct type.num
- must be >= 1 and <= 1 billion
-
allocateIdRange
public <T> com.google.appengine.api.datastore.DatastoreService.KeyRangeState allocateIdRange(KeyRange<T> range)Allocates a user-specified contiguous range of unique IDs, preventing the allocator from giving them out to entities (with autogeneration) or other calls to allocate methods. This lets you specify a specific range to block out (for example, you are bulk-loading a collection of pre-existing entities). If you don't care about what id is allocated, use one of the other allocate methods. -
getTranslators
Gets the master list of all registered TranslatorFactory objects. By adding Translators, Objectify can process additional field types which are not part of the standard GAE SDK. You must add translators *before* registering entity pojo classes.
- Returns:
- the repository of TranslatorFactory objects, to which you can optionally add translators
-
keys
Some tools for working with keys. This is an internal Objectify API and subject to change without notice. You probably want the Key.create() methods instead.
-