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;
    }
protected IPortletRenderExecutionWorker startPortletRenderInternal ( IPortletWindowId portletWindowId , HttpServletRequest request , HttpServletResponse response ) { final Map < IPortletWindowId , Exception > portletFailureMap = getPortletErrorMap ( request ) ; final Exception cause = portletFailureMap . remove ( portletWindowId ) ; final IPortletRenderExecutionWorker portletRenderExecutionWorker ; if ( null != cause ) { 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 ) ) { portletRenderExecutionWorker = this . portletWorkerFactory . createFailureWorker ( request , response , portletWindowId , new MaintenanceModeException ( ) ) ; } else { 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