|
SAP NetWeaver '04 | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
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();
}
}
| Method Summary | |
java.lang.Object |
getTypeUnsafeContext()
Get actual context from stack of contexts. |
java.lang.Object |
getTypeUnsafeContextOrNullIfUnavailable()
Get actual context from stack of contexts. |
boolean |
isAvailable()
Checks if there is at least one actual context stacked. |
java.lang.Object |
popTypeUnsafeContext()
Get and remove actual context from the stack of contexts (optional operation). |
void |
pushTypeUnsafeContext(java.lang.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(java.lang.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. |
| Method Detail |
public boolean isAvailable()
public int size()
public java.lang.Object getTypeUnsafeContext()
throws ContextUnavailableException
ContextUnavailableException - when no (more) context is available
on the context stackpublic java.lang.Object getTypeUnsafeContextOrNullIfUnavailable()
public void setTypeUnsafeContext(java.lang.Object context)
throws java.lang.UnsupportedOperationException
context - new actual context replacing the old one on the stackjava.lang.UnsupportedOperationException - when the context factory isn't
supporting this writing optional operation
public void removeTypeUnsafeContext()
throws java.lang.UnsupportedOperationException
java.lang.UnsupportedOperationException - when the context factory isn't
supporting this writing optional operation
public java.lang.Object popTypeUnsafeContext()
throws ContextUnavailableException,
java.lang.UnsupportedOperationException
ContextUnavailableException - when no (more) context is available
on the context stackjava.lang.UnsupportedOperationException - when the context factory isn't
supporting this writing optional operation
public void pushTypeUnsafeContext(java.lang.Object context)
throws java.lang.UnsupportedOperationException
context - new actual contextjava.lang.UnsupportedOperationException - when the context factory isn't
supporting this writing optional operation
|
SAP NetWeaver '04 | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||