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().
Modifier and Type | Field and Description |
---|---|
protected com.google.cloud.datastore.Datastore |
datastore
The raw interface to the datastore from the Cloud SDK
|
protected EntityMemcache |
entityMemcache
Manages caching of entities; might be null to indicate "no cache"
|
protected Keys |
keys
Some useful tools for working with keys
|
protected MemcacheService |
memcache
The low-level interface to memcache
|
static String |
MEMCACHE_NAMESPACE
Default memcache namespace
|
protected EntityMemcacheStats |
memcacheStats |
protected Registrar |
registrar
Encapsulates entity registration info
|
protected Translators |
translators |
Constructor and Description |
---|
ObjectifyFactory()
Uses default datastore, no memcache
|
ObjectifyFactory(com.google.cloud.datastore.Datastore datastore)
No memcache
|
ObjectifyFactory(com.google.cloud.datastore.Datastore datastore,
net.spy.memcached.MemcachedClient memcache) |
ObjectifyFactory(com.google.cloud.datastore.Datastore datastore,
MemcacheService memcache) |
ObjectifyFactory(net.spy.memcached.MemcachedClient memcache)
Uses default datastore
|
ObjectifyFactory(MemcacheService memcache)
Uses default datastore
|
Modifier and Type | Method and Description |
---|---|
<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> KeyRange<T> |
allocateIds(Class<T> clazz,
int num)
Preallocate multiple unique ids within the namespace of the
specified entity class.
|
<T> KeyRange<T> |
allocateIds(Object parentKeyOrEntity,
Class<T> clazz,
int num)
Preallocate a contiguous range of unique ids within the namespace of the
specified entity class and the parent key.
|
AsyncDatastore |
asyncDatastore()
Always the non-caching version
|
AsyncDatastore |
asyncDatastore(boolean enableGlobalCache)
Might produce a caching version if caching is enabled.
|
Objectify |
begin()
Deprecated.
This method is a holdover from the 1.x days and will be removed soon.
Clients should use
ObjectifyService.ofy() to obtain Objectify instances. |
void |
close(Objectify ofy)
Pops context off of stack after a transaction completes.
|
<T> T |
construct(Class<T> type)
Construct an instance of the specified type.
|
<T extends Collection<?>> |
constructCollection(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<?,?>> |
constructMap(Class<T> type)
Construct a map of the specified type for use on a POJO field.
|
com.google.cloud.datastore.Datastore |
datastore() |
EntityMemcacheStats |
getMemcacheStats()
Get the object that tracks memcache stats.
|
<T> EntityMetadata<T> |
getMetadata(Class<T> clazz) |
<T> EntityMetadata<T> |
getMetadata(com.google.cloud.datastore.Key key) |
<T> EntityMetadata<T> |
getMetadata(Key<T> key) |
<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 form
|
Translators |
getTranslators()
Gets the master list of all registered TranslatorFactory objects.
|
Keys |
keys()
Some tools for working with keys.
|
MemcacheService |
memcache() |
Objectify |
ofy()
The method to call at any time to get the current Objectify, which may change depending on txn context.
|
ObjectifyImpl |
open()
Start a scope of work.
|
ObjectifyImpl |
open(ObjectifyOptions opts,
TransactorSupplier transactorSupplier)
This is only public because it is used from the impl package; don't use this as a public API
|
<T> void |
register(Class<T> clazz)
All POJO entity classes which are to be managed by Objectify
must be registered first.
|
public static final String MEMCACHE_NAMESPACE
protected com.google.cloud.datastore.Datastore datastore
protected MemcacheService memcache
protected Registrar registrar
protected Keys keys
protected Translators translators
protected EntityMemcacheStats memcacheStats
protected EntityMemcache entityMemcache
public ObjectifyFactory()
public ObjectifyFactory(com.google.cloud.datastore.Datastore datastore)
public ObjectifyFactory(net.spy.memcached.MemcachedClient memcache)
public ObjectifyFactory(MemcacheService memcache)
public ObjectifyFactory(com.google.cloud.datastore.Datastore datastore, net.spy.memcached.MemcachedClient memcache)
public ObjectifyFactory(com.google.cloud.datastore.Datastore datastore, MemcacheService memcache)
public com.google.cloud.datastore.Datastore datastore()
public MemcacheService memcache()
public AsyncDatastore asyncDatastore()
public AsyncDatastore asyncDatastore(boolean enableGlobalCache)
public <T> T construct(Class<T> type)
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.
public <T extends Collection<?>> T constructCollection(Class<T> type, int size)
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.
public <T extends Map<?,?>> T constructMap(Class<T> type)
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.
@Deprecated public Objectify begin()
ObjectifyService.ofy()
to obtain Objectify instances.The default options are:
Note that when using Objectify you will almost never directly call this method. Instead you should call the static ofy() method on ObjectifyService.
public <T> void register(Class<T> clazz)
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.
public EntityMemcacheStats getMemcacheStats()
public <T> EntityMetadata<T> getMetadata(Class<T> clazz) throws IllegalArgumentException
IllegalArgumentException
- if the kind has not been registeredpublic <T> EntityMetadata<T> getMetadata(com.google.cloud.datastore.Key key) throws IllegalArgumentException
IllegalArgumentException
- if the kind has not been registeredpublic <T> EntityMetadata<T> getMetadata(Key<T> key) throws IllegalArgumentException
IllegalArgumentException
- if the kind has not been registeredpublic <T> EntityMetadata<T> getMetadata(String kind)
public <T> EntityMetadata<T> getMetadataForEntity(T obj) throws IllegalArgumentException
IllegalArgumentException
- if the kind has not been registeredpublic <T> Key<T> allocateId(Class<T> clazz)
clazz
- must be a registered entity class with a Long or long id field.public <T> Key<T> allocateId(Object parentKeyOrEntity, Class<T> clazz)
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.public <T> KeyRange<T> allocateIds(Class<T> clazz, int num)
Preallocate multiple 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 save()ing entities with null Long id fields.
The KeyRange<?>
class is deprecated; when using this method,
treat the return value as List<Key<T>>
.
clazz
- must be a registered entity class with a Long or long id field.num
- must be >= 1 and small enough we can fit a set of keys in RAM.public <T> KeyRange<T> allocateIds(Object parentKeyOrEntity, Class<T> clazz, int num)
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 billionpublic Translators 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.
public Keys keys()
public Objectify ofy()
ObjectifyService.ofy()
which calls this method.public ObjectifyImpl open()
Start a scope of work. This is the outermost scope of work, typically created by the ObjectifyFilter or by one of the methods on ObjectifyService. You need one of these to do anything at all.
public ObjectifyImpl open(ObjectifyOptions opts, TransactorSupplier transactorSupplier)
public void close(Objectify ofy)
Copyright © 2018. All rights reserved.