com.sap.netweaver.bc.rf.util.context

Interface IContextFactory

All Known Implementing Classes:
AbstractContextFactory, AbstractDependentContextFactory, AbstractIndependentThreadContextFactory, AccessContextFactory

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();
     }
 }
 


Method Summary
 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.
 

Method Detail

isAvailable

boolean isAvailable()
Checks if there is at least one actual context stacked.

Returns:
flag indicating whether there is at least one actual context stacked

size

int size()
Get the number of context entries in the stack of contexts.

Returns:
number of context entries in the stack of contexts

getTypeUnsafeContext

Object getTypeUnsafeContext()
                            throws ContextUnavailableException
Get actual context from stack of contexts.

Returns:
actual context on the context stack
Throws:
ContextUnavailableException - when no (more) context is available on the context stack

getTypeUnsafeContextOrNullIfUnavailable

Object getTypeUnsafeContextOrNullIfUnavailable()
Get actual context from stack of contexts. Return null if none is availble and don't throw a ContextUnavailableException.

Returns:
actual context on the context stack

setTypeUnsafeContext

void setTypeUnsafeContext(Object context)
                          throws UnsupportedOperationException
Replace actual context with new one in stack of contexts (optional operation). If no context is stored, this one will be added.

Parameters:
context - new actual context replacing the old one on the stack
Throws:
UnsupportedOperationException - when the context factory isn't supporting this writing optional operation

removeTypeUnsafeContext

void removeTypeUnsafeContext()
                             throws UnsupportedOperationException
Remove actual context including all other stacked contexts completely (optional operation).

Throws:
UnsupportedOperationException - when the context factory isn't supporting this writing optional operation

popTypeUnsafeContext

Object popTypeUnsafeContext()
                            throws ContextUnavailableException,
                                   UnsupportedOperationException
Get and remove actual context from the stack of contexts (optional operation).

Returns:
last actual context on the context stack
Throws:
ContextUnavailableException - when no (more) context is available on the context stack
UnsupportedOperationException - when the context factory isn't supporting this writing optional operation

pushTypeUnsafeContext

void pushTypeUnsafeContext(Object context)
                           throws UnsupportedOperationException
Add new context to the top of the stack of contexts (optional operation).

Parameters:
context - new actual context
Throws:
UnsupportedOperationException - when the context factory isn't supporting this writing optional operation
Access Rights

This class can be accessed from:


SC DC Public Part ACH
[sap.com] KMC-WPC [sap.com] tc/kmc/wpc/wpcfacade api EP-PIN-WPC-WCM
[sap.com] KMC-CM [sap.com] tc/km/frwk api EP-KM-CM


Copyright 2011 SAP AG Complete Copyright Notice