Como posso tornar o "AjaxLink" do Wicket sem estado?

Eu estou construindo uma aplicação web Wicket que vai ter que lidar com um monte de solicitações simultâneas. Eu configurei um ambiente de teste e alguns scripts de jmeter para fazer o teste de carga e percebo que posso reduzir a pegada de CPU e memória do meu aplicativo se eu fizer a maioria das páginas sem estado.

Eu adicionei código ao método onBeforeRender () da maior página para mostrar quais dos componentes estão fazendo com que minha página seja stateful. Este é o código que tenho para detectar isso:

<code>@Override
protected void onBeforeRender() {    
    if (!getSession().isTemporary()) {
        visitChildren(Component.class, new IVisitor<Component>() {
            @Override
            public Object component(Component component) {
                String pageClassName = AbstractStatelessBasePage.this.getClass().getName();
                if (!component.isStateless()) {

                    String msg = pageClassName+" is stateful because of stateful component " + component.getClass().getName() + " with id " + component.getId() + ".";

                    List<IBehavior> behaviourList = component.getBehaviors();
                    for (IBehavior iBehavior : behaviourList) {
                        if (!iBehavior.getStatelessHint(component)) {
                            msg += "\n\t" + "The component has stateful behaviour: " + iBehavior.getClass().getName();
                        }
                    }
                    LOG.error(msg);
                }

                checkedPages.add(pageClassName);
                return CONTINUE_TRAVERSAL;
            }
        });
    }
}
</code>

Na saída, vejo que o comportamento stateful é causado pelos AjaxLinks usados ​​por alguns dos componentes existentes nas páginas:

<code>ERROR - AbstractStatelessBasePage$1.component(45) | HomePage is stateful because of stateful component InfoGrid$InfoButton with id infoButton.
    The component has stateful behaviour: org.apache.wicket.ajax.markup.html.AjaxLink$1
</code>

Eu tentei adicionar métodos getStatelessHint () retornando "true" em alguns lugares, mas parece não ajudar. Também verifiquei o código-fonte do Wicket do AjaxLink, suas superclasses e algum código circundante, mas não consigo descobrir por que o AjaxLink precisa ser stateful em todos os casos.

No meu caso, o AjaxLink está em uma página Stateless e o link não armazena o estado. Como posso fazer com que o Wicket entenda que esse AjaxLink pode ser sem estado?

Obrigado pela sua ajuda, Rolf

Editar: Resposta aceita funciona com o Wicket 1.4.19.

Adicionado o seguinte ao maven pom.xml:

<code><dependency>
    <groupId>com.jolira</groupId>
    <artifactId>wicket-stateless</artifactId>
    <version>1.0.8</version>
</dependency>
</code>

Mudou todos os componentes que estenderam "AjaxLink" para estender "StatelessAjaxFallbackLink".

Não se esqueça de adicionar o seguinte à sua classe WicketApplication, isso poupará algum tempo para a solução de problemas:

<code>@Override
protected IRequestCycleProcessor newRequestCycleProcessor() {
    return new StatelessWebRequestCycleProcessor();
}
</code>

Por favor, note que o StatelessForm e outras coisas sem estado não funcionam dentro de um repetidor (como "ListView") por algum motivo.

questionAnswers(2)

yourAnswerToTheQuestion