this.registry = portletApplicationRegistry;
}
public PortletInvocationResponse invoke(PortletInvocation invocation) throws IllegalArgumentException, PortletInvokerException
{
PortletContainerImpl container = (PortletContainerImpl)invocation.getAttribute(ContainerPortletInvoker.PORTLET_CONTAINER);
//
Valve valve = container.getValve();
if (valve.beforeInvocation())
{
PortletInvocationResponse response;
try
{
response = super.invoke(invocation);
}
finally
{
// Release the valve
valve.afterInvocation();
}
// Stop the container if necessary
if (response instanceof UnavailableResponse)
{
PortletContainerContext containerContext = container.getContext();
// This call will wait until all the current threads have exited the component valve.
// Perhaps this should be done asynchronously as it may lead to a long delay ?
// It could be made parametrizable as a runtime option too, so the deployer can choose what mode is preferable
containerContext.managedStop();