public interface IContextFactory
Interface describing a context factory, i.e. a factory used to get and set a context (some available information). Retrieving the context should be possible without the need for arguments, e.g. by looking into a thread local variable.
A class implementing this interface must implement the singleton pattern and must register with the context factory registry before any context is requested from that registry. This is automatically done, when subclassing the abstract context factory classes.
There are two different kinds of context factories. One, the independent one, that supports all optional write operations and another one, the dependent one, that depends on another context factory and therefore doesn't support the optional write operations, since they would need to modify other contexts in an unexpected way:
Mandatory read operation: public boolean isAvailable(); public int size(); public Object getTypeUnsafeContext() throws ContextUnavailableException; public Object getTypeUnsafeContextOrNullIfUnavailable(); Optional write operations: public void setTypeUnsafeContext( Object context ) throws UnsupportedOperationException; public void removeTypeUnsafeContext( ) throws UnsupportedOperationException; public Object popTypeUnsafeContext() throws ContextUnavailableException, UnsupportedOperationException; public void pushTypeUnsafeContext( Object context ) throws UnsupportedOperationException;
All context factories may implement additional type-safe versions of the above methods. Therefore the signatures contain the word "TypeUnsafe" in the name.
The dependent context factories are used to hide the computation of information normally spread over multiple code spots and are therefore to be prefered over own code doing the computation based on independent context factories.
Here an example for an independent context factory:
public class IndependentUserContextFactory extends AbstractIndependentThreadContextFactory { private static IndependentUserContextFactory inst = new IndependentUserContextFactory(); public static IndependentUserContextFactory getInstance() { return inst; } public User getContext() throws ContextUnavailableException { return ( User )inst.getTypeUnsafeContext(); } public void setContext( User context ) { inst.setTypeUnsafeContext( context ); } public void removeContext( ) { inst.removeTypeUnsafeContext( ); } public User popContext() throws ContextUnavailableException { return ( User )inst.popTypeUnsafeContext(); } public void pushContext( User context ) { inst.pushTypeUnsafeContext( context ); } }
Here an example for a dependent context factory:
public class DependentLocaleContextFactory extends AbstractDependentContextFactory { private static DependentLocaleContextFactory inst = new DependentLocaleContextFactory(); public static DependentLocaleContextFactory getInstance() { return inst; } public Object getTypeUnsafeContext() throws ContextUnavailableException { return IndependentUserContextFactory.getInstance().getContext().getLocale(); } public Locale getContext() throws ContextUnavailableException { return IndependentUserContextFactory.getInstance().getContext().getLocale(); } }
Created 20. Januar 2003
Modifier and Type | Method and Description |
---|---|
Object |
getTypeUnsafeContext()
Get actual context from stack of contexts.
|
Object |
getTypeUnsafeContextOrNullIfUnavailable()
Get actual context from stack of contexts.
|
boolean |
isAvailable()
Checks if there is at least one actual context stacked.
|
Object |
popTypeUnsafeContext()
Get and remove actual context from the stack of contexts (optional
operation).
|
void |
pushTypeUnsafeContext(Object context)
Add new context to the top of the stack of contexts (optional operation).
|
void |
removeTypeUnsafeContext()
Remove actual context including all other stacked contexts completely
(optional operation).
|
void |
setTypeUnsafeContext(Object context)
Replace actual context with new one in stack of contexts (optional
operation).
|
int |
size()
Get the number of context entries in the stack of contexts.
|
boolean isAvailable()
int size()
Object getTypeUnsafeContext() throws ContextUnavailableException
ContextUnavailableException
- when no (more) context is available
on the context stackObject getTypeUnsafeContextOrNullIfUnavailable()
void setTypeUnsafeContext(Object context) throws UnsupportedOperationException
context
- new actual context replacing the old one on the stackUnsupportedOperationException
- when the context factory isn't
supporting this writing optional operationvoid removeTypeUnsafeContext() throws UnsupportedOperationException
UnsupportedOperationException
- when the context factory isn't
supporting this writing optional operationObject popTypeUnsafeContext() throws ContextUnavailableException, UnsupportedOperationException
ContextUnavailableException
- when no (more) context is available
on the context stackUnsupportedOperationException
- when the context factory isn't
supporting this writing optional operationvoid pushTypeUnsafeContext(Object context) throws UnsupportedOperationException
context
- new actual contextUnsupportedOperationException
- when the context factory isn't
supporting this writing optional operationAccess Rights |
---|
SC | DC | Public Part | ACH |
---|---|---|---|
[sap.com] KMC-CM
|
[sap.com] tc/km/frwk
|
api
|
EP-KM-CM
|
[sap.com] KMC-WPC
|
[sap.com] tc/kmc/wpc/wpcfacade
|
api
|
EP-PIN-WPC-WCM
|
Copyright 2018 SAP AG Complete Copyright Notice