Class FactoryFinder
- java.lang.Object
- 
- jakarta.faces.FactoryFinder
 
- 
 public final class FactoryFinder extends Object FactoryFinder implements the standard discovery algorithm for all factory objects specified in the Jakarta 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 Jakarta Faces configuration file bundled into the WEB-INFdirectory of the webapp contains afactoryentry of the given factory class name, that factory is used.
- 
 If the Jakarta Faces configuration files named by the jakarta.faces.CONFIG_FILESServletContextinit parameter contain anyfactoryentries of the given factory class name, those injectionProvider are used, with the last one taking precedence.
- 
 If there are any Jakarta Faces configuration files bundled into the META-INFdirectory of any jars on theServletContext's resource paths, thefactoryentries 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 Jakarta 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 inMETA-INF/services/jakarta.faces.context.FacesContextFactoryin a jar on the webapp ClassLoader. Also say this implementation provided by the container vendor had a one argument constructor that took aFacesContextFactoryinstance. TheFactoryFindersystem would call that one-argument constructor, passing the implementation ofFacesContextFactoryprovided by the Jakarta 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 Jakarta Server Faces implementation is included within the web application or is made visible through the container's facilities for shared libraries. 
- 
 
- 
- 
Field SummaryFields Modifier and Type Field Description static StringAPPLICATION_FACTORYThe property name for theApplicationFactoryclass name.static StringCLIENT_WINDOW_FACTORYThe property name for theClientWindowFactoryclass name.static StringEXCEPTION_HANDLER_FACTORYThe property name for theExceptionHandlerFactoryclass name.static StringEXTERNAL_CONTEXT_FACTORYThe property name for theExternalContextFactoryclass name.static StringFACELET_CACHE_FACTORYThe property name for theFaceletCacheFactoryclass name.static StringFACES_CONTEXT_FACTORYThe property name for theFacesContextFactoryclass name.static StringFLASH_FACTORYThe property name for theFlashFactoryclass name.static StringFLOW_HANDLER_FACTORYThe property name for theFlowHandlerFactoryclass name.static StringLIFECYCLE_FACTORYThe property name for theLifecycleFactoryclass name.static StringPARTIAL_VIEW_CONTEXT_FACTORYThe property name for thePartialViewContextFactoryclass name.static StringRENDER_KIT_FACTORYThe property name for theRenderKitFactoryclass name.static StringSEARCH_EXPRESSION_CONTEXT_FACTORYThe property name for theSearchExpressionContextclass name.static StringTAG_HANDLER_DELEGATE_FACTORYThe property name for theTagHandlerDelegateclass name.static StringVIEW_DECLARATION_LANGUAGE_FACTORYThe property name for theViewDeclarationLanguageclass name.static StringVISIT_CONTEXT_FACTORYThe property name for theVisitContextFactoryclass name.
 - 
Method SummaryAll Methods Static Methods Concrete Methods Modifier and Type Method Description static ObjectgetFactory(String factoryName)Create (if necessary) and return a per-web-application instance of the appropriate implementation class for the specified Jakarta Faces factory class, based on the discovery algorithm described in the class description.static voidreleaseFactories()Release any references to factory instances associated with the class loader for the calling web application.static voidsetFactory(String factoryName, String implName)This method will store the argumentfactoryName/implNamemapping in such a way thatgetFactory(java.lang.String)will find this mapping when searching for a match.
 
- 
- 
- 
Field Detail- 
APPLICATION_FACTORYpublic static final String APPLICATION_FACTORY The property name for the ApplicationFactoryclass name.- See Also:
- Constant Field Values
 
 - 
CLIENT_WINDOW_FACTORYpublic static final String CLIENT_WINDOW_FACTORY The property name for the ClientWindowFactoryclass name.- Since:
- 2.2
- See Also:
- Constant Field Values
 
 - 
EXCEPTION_HANDLER_FACTORYpublic static final String EXCEPTION_HANDLER_FACTORY The property name for the ExceptionHandlerFactoryclass name.- See Also:
- Constant Field Values
 
 - 
EXTERNAL_CONTEXT_FACTORYpublic static final String EXTERNAL_CONTEXT_FACTORY The property name for the ExternalContextFactoryclass name.- See Also:
- Constant Field Values
 
 - 
FACES_CONTEXT_FACTORYpublic static final String FACES_CONTEXT_FACTORY The property name for the FacesContextFactoryclass name.- See Also:
- Constant Field Values
 
 - 
FACELET_CACHE_FACTORYpublic static final String FACELET_CACHE_FACTORY The property name for the FaceletCacheFactoryclass name.- Since:
- 2.1
- See Also:
- Constant Field Values
 
 - 
FLASH_FACTORYpublic static final String FLASH_FACTORY The property name for the FlashFactoryclass name.- Since:
- 2.2
- See Also:
- Constant Field Values
 
 - 
FLOW_HANDLER_FACTORYpublic static final String FLOW_HANDLER_FACTORY The property name for the FlowHandlerFactoryclass name.- Since:
- 2.2
- See Also:
- Constant Field Values
 
 - 
PARTIAL_VIEW_CONTEXT_FACTORYpublic static final String PARTIAL_VIEW_CONTEXT_FACTORY The property name for the PartialViewContextFactoryclass name.- See Also:
- Constant Field Values
 
 - 
VISIT_CONTEXT_FACTORYpublic static final String VISIT_CONTEXT_FACTORY The property name for the VisitContextFactoryclass name.- See Also:
- Constant Field Values
 
 - 
LIFECYCLE_FACTORYpublic static final String LIFECYCLE_FACTORY The property name for the LifecycleFactoryclass name.- See Also:
- Constant Field Values
 
 - 
RENDER_KIT_FACTORYpublic static final String RENDER_KIT_FACTORY The property name for the RenderKitFactoryclass name.- See Also:
- Constant Field Values
 
 - 
VIEW_DECLARATION_LANGUAGE_FACTORYpublic static final String VIEW_DECLARATION_LANGUAGE_FACTORY The property name for the ViewDeclarationLanguageclass name.- See Also:
- Constant Field Values
 
 - 
TAG_HANDLER_DELEGATE_FACTORYpublic static final String TAG_HANDLER_DELEGATE_FACTORY The property name for the TagHandlerDelegateclass name.- See Also:
- Constant Field Values
 
 - 
SEARCH_EXPRESSION_CONTEXT_FACTORYpublic static final String SEARCH_EXPRESSION_CONTEXT_FACTORY The property name for the SearchExpressionContextclass name.- See Also:
- Constant Field Values
 
 
- 
 - 
Method Detail- 
getFactorypublic 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 Jakarta Faces factory class, based on the discovery algorithm described in the class description. The standard injectionProvider and wrappers in Jakarta Faces all implement the interface FacesWrapper. If the returnedObjectis an implementation of one of the standard injectionProvider, it must be legal to cast it to an instance ofFacesWrapperand callFacesWrapper.getWrapped()on the instance.- Parameters:
- factoryName- Fully qualified name of the Jakarta Faces factory for which an implementation instance is requested
- Returns:
- the found factory instance
- Throws:
- FacesException- if the web application class loader cannot be identified
- FacesException- if an instance of the configured factory implementation class cannot be loaded
- FacesException- if an instance of the configured factory implementation class cannot be instantiated
- IllegalArgumentException- if- factoryNamedoes not identify a standard Jakarta Faces factory name
- IllegalStateException- if there is no configured factory implementation class for the specified factory name
- NullPointerException- if- factorynameis null
 
 - 
setFactorypublic 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.This method has no effect if getFactory()has already been called looking for a factory for thisfactoryName.This method can be used by implementations to store a factory mapping while parsing the Faces configuration file - Parameters:
- factoryName- the name to be used in a subsequent call to- getFactory(java.lang.String).
- implName- the fully qualified class name of the factory corresponding to- factoryName.
- Throws:
- IllegalArgumentException- if- factoryNamedoes not identify a standard Jakarta Faces factory name
- NullPointerException- if- factorynameis null
 
 - 
releaseFactoriespublic static void releaseFactories() throws FacesExceptionRelease 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. - Throws:
- FacesException- if the web application class loader cannot be identified
 
 
- 
 
-