protected IPortletRenderExecutionWorker startPortletRenderInternal ( IPortletWindowId portletWindowId , HttpServletRequest request , HttpServletResponse response ) { // first check to see if there is a Throwable in the session for this IPortletWindowId final Map < IPortletWindowId , Exception > portletFailureMap = getPortletErrorMap ( request ) ; final Exception cause = portletFailureMap . remove ( portletWindowId ) ; final IPortletRenderExecutionWorker portletRenderExecutionWorker ; if ( null != cause ) { // previous action failed, dispatch to errorPortlet immediately portletRenderExecutionWorker = this . portletWorkerFactory . createFailureWorker ( request , response , portletWindowId , cause ) ; } else { IPortletWindow portletWindow = portletWindowRegistry . getPortletWindow ( request , portletWindowId ) ; IPortletDefinition portletDef = portletWindow . getPortletEntity ( ) . getPortletDefinition ( ) ; if ( portletDef . getLifecycleState ( ) . equals ( PortletLifecycleState . MAINTENANCE ) ) { // Prevent the portlet from rendering; replace with a helpful "Out of Service" // message portletRenderExecutionWorker = this . portletWorkerFactory . createFailureWorker ( request , response , portletWindowId , new MaintenanceModeException ( ) ) ; } else { // Happy path portletRenderExecutionWorker = this . portletWorkerFactory . createRenderWorker ( request , response , portletWindowId ) ; } } portletRenderExecutionWorker . submit ( ) ; final Map < IPortletWindowId , IPortletRenderExecutionWorker > portletRenderingMap = this . getPortletRenderingMap ( request ) ; portletRenderingMap . put ( portletWindowId , portletRenderExecutionWorker ) ; return portletRenderExecutionWorker ; }
create and submit the portlet content rendering job to the thread pool