SAP NetWeaver '04

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

[contained in: com.sap.netweaver.bc.rf.par - bc.rf.util_api.jar]
All Known Implementing Classes:
AbstractContextFactory

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
 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

isAvailable

public 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

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

getTypeUnsafeContext

public java.lang.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

public java.lang.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

public void setTypeUnsafeContext(java.lang.Object context)
                          throws java.lang.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:
java.lang.UnsupportedOperationException - when the context factory isn't supporting this writing optional operation

removeTypeUnsafeContext

public void removeTypeUnsafeContext()
                             throws java.lang.UnsupportedOperationException
Remove actual context including all other stacked contexts completely (optional operation).
Throws:
java.lang.UnsupportedOperationException - when the context factory isn't supporting this writing optional operation

popTypeUnsafeContext

public java.lang.Object popTypeUnsafeContext()
                                      throws ContextUnavailableException,
                                             java.lang.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
java.lang.UnsupportedOperationException - when the context factory isn't supporting this writing optional operation

pushTypeUnsafeContext

public void pushTypeUnsafeContext(java.lang.Object context)
                           throws java.lang.UnsupportedOperationException
Add new context to the top of the stack of contexts (optional operation).
Parameters:
context - new actual context
Throws:
java.lang.UnsupportedOperationException - when the context factory isn't supporting this writing optional operation

SAP NetWeaver '04

Copyright © 2004 by SAP AG. All Rights Reserved.
SAP, R/3, mySAP, mySAP.com, xApps, xApp, SAP NetWeaver, and other SAP products and services mentioned herein as well as their respective logos are trademarks or registered trademarks of SAP AG in Germany and in several other countries all over the world. All other product and service names mentioned are the trademarks of their respective companies. Data contained in this document serves informational purposes only. National product specifications may vary.

These materials are subject to change without notice. These materials are provided by SAP AG and its affiliated companies ("SAP Group") for informational purposes only, without representation or warranty of any kind, and SAP Group shall not be liable for errors or omissions with respect to the materials. The only warranties for SAP Group products and services are those that are set forth in the express warranty statements accompanying such products and services, if any. Nothing herein should be construed as constituting an additional warranty.