As described in the forum thread titled Why does LiferayFacesContext extend FacesContext?, the original intent of LiferayFacesContext provide a convenient way for developers to get a single contextual object that would enable developers to access JSF, Portlet, and Liferay operations associated with the request.
In retrospect, having LiferayFacesContext and ExtFacesContext extend FacesContext caused confusion since LiferayFacesContext.getInstance() returned an application singleton whereas LiferayFacesContext.getCurrentInstance() returned the ThreadLocal FacesContext singleton.
In order to remedy this problem, the ExtFacesContext and LiferayFacesContext classes will be deprecated.
As a replacement, the following classes will be created in liferay-faces-util:
Also as a replacement, the following classes will be created in liferay-faces-portal:
This will enable the developer to utilize the standard JSF factory delegation chain pattern to decorate FacesContextHelper, PortletHelper, and LiferayPortletHelper. In addition the "Util" classes will provide static convenience methods that call through to the underlying singletons returned by the respective factories.