4

Spring-WebFlow 是否提供了一种了解当前正在执行的流数量的方法?

我可以使用全局 bean 来解决它,但也许 WebFlow 提供了一个开箱即用的解决方案。

编辑:根据要求,这里是基于FlowExecutionListenerAdapter的所谓“全局 Bean”解决方案

package your.package;

import org.apache.log4j.Logger;
import org.springframework.webflow.core.collection.AttributeMap;
import org.springframework.webflow.definition.StateDefinition;
import org.springframework.webflow.definition.TransitionDefinition;
import org.springframework.webflow.execution.FlowExecutionListenerAdapter;
import org.springframework.webflow.execution.FlowSession;
import org.springframework.webflow.execution.RequestContext;

public class FlowExecutionListener extends FlowExecutionListenerAdapter {

    private static Logger   logger          = Logger.getLogger(FlowExecutionListener.class);
    private int             sessionCount    = 0;


    @Override
    public void sessionStarted(final RequestContext context, final FlowSession session) {
        super.sessionStarted(context, session);
        sessionCount++;
        logger.debug("sessionStarted, state: " + session.getState().getId() + ", count: " + sessionCount);
    }


    @Override
    public void sessionEnded(final RequestContext context, final FlowSession session, final String outcome, final AttributeMap output) {
        super.sessionEnded(context, session, outcome, output);
        sessionCount--;
        logger.debug("sessionEnded, state: " + session.getState().getId() + ", count: " + sessionCount);
    }

}

bean 必须在 Spring 级别注册:

<bean id="flowExecutionListener" class="your.package.FlowExecutionListener" />

编辑2:

如果您的应用程序中有多个 WebFlow,这将计算所有活动流。如果您想单独计算它们,您可以使用session.getDefinition().getId()获取流的 ID 。

4

0 回答 0