Class ServiceFactoryFactory
Provide factory instances for AppEngine APIs. Each API will have an associated
FactoryProvider
registered with this class. N.B. Once getFactory(Class)
has
been called, no further mappings may be registered with this class.
To construct the runtime mapping, this class first uses java.util.ServiceLoader
to
find all registered FactoryProvider
entities using the ClassLoader
of
ServiceFactoryFactory
. Finally, the explicitly registered providers
register(FactoryProvider)
are merged in.
If ServiceLoader
locates multiple providers for a given factory interface, the
ambiguity can be resolved by using the ServiceProvider.precedence()
annotation property
(higher precedence wins; the google implementations all have precedence
Integer.MIN_VALUE). An exception is raised if the ambiguity cannot be resolved. Note that
explicit registration (register(FactoryProvider)
) always takes precedence (it does not
honor the ServiceProvider.precedence()
annotation property).
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final String
If this system property is set to "true" the thread context classloader is used (if non-null) when looking up API service implementations. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic <T> T
getFactory
(Class<T> base) Used by AppEngine service factories.static <I> void
register
(FactoryProvider<I> p) Explicitly register a provider.
-
Field Details
-
USE_THREAD_CONTEXT_CLASSLOADER_PROPERTY
If this system property is set to "true" the thread context classloader is used (if non-null) when looking up API service implementations. Otherwise the class loader of this class is used.- See Also:
-
-
Constructor Details
-
ServiceFactoryFactory
public ServiceFactoryFactory()
-
-
Method Details
-
getFactory
Used by AppEngine service factories. Returns an instance of the factory implementing the interface provide bybase
. Since there must always be a provider registered for a given base, an error will be raised if no appropriate registration is found.- Type Parameters:
T
- The type of the factory- Parameters:
base
- The returned factory must extend this class.- Throws:
IllegalArgumentException
- raised if the client requests a factory that does not have a provider registered for it.ServiceConfigurationError
- raised if there is a problem creating the factory instance
-
register
Explicitly register a provider. This does not take the precedence (seeFactoryProvider.getPrecedence()
) of the provider into consideration; subsequent registrations will always override previous ones.- Parameters:
p
- The provider to register- Throws:
IllegalStateException
- raised if calls to getFactoryProvider have already been made.
-