public final class FactoryFinder extends Object
FactoryFinder implements the standard discovery algorithm for all factory objects specified in the JavaServer Faces APIs. For a given factory class name, a corresponding implementation class is searched for based on the following algorithm. Items are listed in order of decreasing search precedence:
If the JavaServer Faces configuration file bundled into the
 WEB-INF directory of the webapp contains a
 factory entry of the given factory class name, that
 factory is used.
If the JavaServer Faces configuration files named by the
 javax.faces.CONFIG_FILES ServletContext init
 parameter contain any factory entries of the given
 factory class name, those injectionProvider are used, with the last one taking
 precedence.
If there are any JavaServer Faces configuration files bundled
 into the META-INF directory of any jars on the
 ServletContext's resource paths, the
 factory entries of the given factory class name in those
 files are used, with the last one taking precedence.
If a META-INF/services/{factory-class-name}
 resource is visible to the web application class loader for the
 calling application (typically as a injectionProvider of being present in the
 manifest of a JAR file), its first line is read and assumed to be the
 name of the factory implementation class to use.
If none of the above steps yield a match, the JavaServer Faces implementation specific class is used.
If any of the injectionProvider found on any of the steps above happen to
 have a one-argument constructor, with argument the type being the
 abstract factory class, that constructor is invoked, and the previous
 match is passed to the constructor.  For example, say the container
 vendor provided an implementation of FacesContextFactory, and identified it in
 META-INF/services/javax.faces.context.FacesContextFactory
 in a jar on the webapp ClassLoader.  Also say this implementation
 provided by the container vendor had a one argument constructor that
 took a FacesContextFactory instance.  The
 FactoryFinder system would call that one-argument
 constructor, passing the implementation of
 FacesContextFactory provided by the JavaServer Faces
 implementation.
If a Factory implementation does not provide a proper one-argument constructor, it must provide a zero-arguments constructor in order to be successfully instantiated.
Once the name of the factory implementation class is located, the web application class loader for the calling application is requested to load this class, and a corresponding instance of the class will be created. A side effect of this rule is that each web application will receive its own instance of each factory class, whether the JavaServer Faces implementation is included within the web application or is made visible through the container's facilities for shared libraries.
| Modifier and Type | Field and Description | 
|---|---|
| static String | APPLICATION_FACTORYThe property name for the
  ApplicationFactoryclass name. | 
| static String | CLIENT_WINDOW_FACTORYThe property name for the
  ClientWindowFactoryclass name. | 
| static String | EXCEPTION_HANDLER_FACTORYThe property name for the  | 
| static String | EXTERNAL_CONTEXT_FACTORYThe property name for the  | 
| static String | FACELET_CACHE_FACTORYThe property name for the
  | 
| static String | FACES_CONTEXT_FACTORYThe property name for the
  FacesContextFactoryclass name. | 
| static String | FLASH_FACTORYThe property name for the
  | 
| static String | FLOW_HANDLER_FACTORYThe property name for the
  | 
| static String | LIFECYCLE_FACTORYThe property name for the
  LifecycleFactoryclass name. | 
| static String | PARTIAL_VIEW_CONTEXT_FACTORYThe property name for the  | 
| static String | RENDER_KIT_FACTORYThe property name for the
  RenderKitFactoryclass name. | 
| static String | TAG_HANDLER_DELEGATE_FACTORYThe property name for the  | 
| static String | VIEW_DECLARATION_LANGUAGE_FACTORYThe property name for the  | 
| static String | VISIT_CONTEXT_FACTORYThe property name for the  | 
| Modifier and Type | Method and Description | 
|---|---|
| static Object | getFactory(String factoryName)Create (if
 necessary) and return a per-web-application instance of the
 appropriate implementation class for the specified JavaServer
 Faces factory class, based on the discovery algorithm described
 in the class description. | 
| static void | releaseFactories()Release any
 references to factory instances associated with the class loader
 for the calling web application. | 
| static void | setFactory(String factoryName,
          String implName)This method will store the argument
  factoryName/implNamemapping in such a way thatgetFactory(java.lang.String)will find this mapping when searching for a
 match. | 
public static final String APPLICATION_FACTORY
The property name for the
 ApplicationFactory class name.
public static final String CLIENT_WINDOW_FACTORY
The property name for the
 ClientWindowFactory class name.
public static final String EXCEPTION_HANDLER_FACTORY
The property name for the ExceptionHandlerFactory class name.
public static final String EXTERNAL_CONTEXT_FACTORY
The property name for the ExternalContextFactory class name.
public static final String FACES_CONTEXT_FACTORY
The property name for the
 FacesContextFactory class name.
public static final String FACELET_CACHE_FACTORY
The property name for the
 FaceletCacheFactory class name.
public static final String FLASH_FACTORY
The property name for the
 FlashFactory class name.
public static final String FLOW_HANDLER_FACTORY
The property name for the
 FlowHandlerFactory class name.
public static final String PARTIAL_VIEW_CONTEXT_FACTORY
The property name for the PartialViewContextFactory class name.
public static final String VISIT_CONTEXT_FACTORY
The property name for the VisitContextFactory class name.
public static final String LIFECYCLE_FACTORY
The property name for the
 LifecycleFactory class name.
public static final String RENDER_KIT_FACTORY
The property name for the
 RenderKitFactory class name.
public static final String VIEW_DECLARATION_LANGUAGE_FACTORY
The property name for the ViewDeclarationLanguage class name.
public static final String TAG_HANDLER_DELEGATE_FACTORY
The property name for the TagHandlerDelegate class name.
public static Object getFactory(String factoryName) throws FacesException
Create (if necessary) and return a per-web-application instance of the appropriate implementation class for the specified JavaServer Faces factory class, based on the discovery algorithm described in the class description.
The standard injectionProvider and wrappers
 in JSF all implement the interface FacesWrapper.  If the
 returned Object is an implementation of one of the
 standard injectionProvider, it must be legal to cast it to an instance of
 FacesWrapper and call FacesWrapper.getWrapped() on the instance.
factoryName - Fully qualified name of the JavaServer Faces factory
                    for which an implementation instance is requestedFacesException - if the web application class loader
                                  cannot be identifiedFacesException - if an instance of the configured factory
                                  implementation class cannot be loadedFacesException - if an instance of the configured factory
                                  implementation class cannot be instantiatedIllegalArgumentException - if factoryName does not
                                  identify a standard JavaServer Faces factory nameIllegalStateException - if there is no configured factory
                                  implementation class for the specified factory nameNullPointerException - if factoryname
                                  is nullpublic static void setFactory(String factoryName, String implName)
This method will store the argument
 factoryName/implName mapping in such a way that
 getFactory(java.lang.String) will find this mapping when searching for a
 match.
This method has no effect if getFactory() has
 already been called looking for a factory for this
 factoryName.
This method can be used by implementations to store a factory mapping while parsing the Faces configuration file
IllegalArgumentException - if factoryName does not
                                  identify a standard JavaServer Faces factory nameNullPointerException - if factoryname
                                  is nullpublic static void releaseFactories()
                             throws FacesException
Release any references to factory instances associated with the class loader for the calling web application. This method must be called during of web application shutdown.
FacesException - if the web application class loader
                        cannot be identifiedCopyright © 1996-2015, Oracle and/or its affiliates. All Rights Reserved. Use is subject to license terms.