<?xml version="1.0" encoding="UTF-8" ?>
<!--
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
-->
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 6.0//EN"
	"https://struts.apache.org/dtds/struts-6.0.dtd">

<struts>

    <bean type="org.apache.struts2.interceptor.exec.ExecutorProvider" name="threadPool"
          class="org.apache.struts2.showcase.wait.ThreadPoolExecutorProvider"/>

    <constant name="struts.executor.provider" value="threadPool"/>

    <package name="wait" extends="struts-default" namespace="/wait">
        <default-action-ref name="index"/>
        <action name="index">
            <result>/WEB-INF/wait/index.jsp</result>
        </action>

        <action name="example1">
            <result>/WEB-INF/wait/example1.jsp</result>
        </action>

        <action name="example2">
            <result>/WEB-INF/wait/example2.jsp</result>
        </action>

        <action name="example3">
            <result>/WEB-INF/wait/example3.jsp</result>
        </action>

        <action name="longProcess1" class="org.apache.struts2.showcase.wait.LongProcessAction">
            <interceptor-ref name="defaultStack"/>
            <interceptor-ref name="execAndWait"/>
            <result name="wait">/WEB-INF/wait/wait.jsp</result>
            <result name="success">/WEB-INF/wait/complete.jsp</result>
        </action>

        <action name="longProcess2" class="org.apache.struts2.showcase.wait.LongProcessAction">
            <interceptor-ref name="defaultStack"/>
            <interceptor-ref name="execAndWait">
                <param name="delay">2000</param>
            </interceptor-ref>
            <result name="wait">/WEB-INF/wait/wait.jsp</result>
            <result name="success">/WEB-INF/wait/complete.jsp</result>
        </action>

        <action name="longProcess3" class="org.apache.struts2.showcase.wait.LongProcessAction">
            <interceptor-ref name="defaultStack"/>
            <interceptor-ref name="execAndWait">
                <param name="delay">3000</param>
                <param name="delaySleepInterval">1000</param>
            </interceptor-ref>
            <result name="wait">/WEB-INF/wait/wait.jsp</result>
            <result name="success">/WEB-INF/wait/complete.jsp</result>
        </action>

    </package>

</struts>
