Olá,
Estou usando JSF 3.0 com Conversation Scope em alguns Managed Beans. O problema que estou enfrentando é configurar o tempo limite para expirar conversas abandonadas. O padrão de 30 minutos é muito longo para o meu contexto e preciso definir isso em torno de 10 minutos. Já tentei definir o timeout usando o método conversation.setTimeout(10000), mas, mesmo tendo o TomEE mostrando que o timeout correto foi configuracao, através do conversation.getTimeout(), ele continua expirando a conversa e consequentemente destruindo os ManagedBeans, somente após 30 minutos. A segunda abordagem que tentei é criar o arquivo openwebbeans.properties dentro do diretório META-INF/openwebbeans e colocar essas chaves:
configuration.ordinal=101
org.apache.webbeans.conversation.Conversation.timeoutInterval=10000
Novamente os resultados são os mesmos. O TomEE mostra o tempo limite correto por meio do método conversation.getTimeout(), mas continua expirando a conversa somente após 30 minutos.
Segue o código que usei para testar a situação:
package estudosjsf;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import jakarta.enterprise.context.Conversation;
import jakarta.enterprise.context.ConversationScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
@Named
@ConversationScoped
public class Controller implements Serializable {
private static final long serialVersionUID = 1L;
private String text = "This is a simple text";
@Inject
private Conversation conversation;
@PostConstruct
public void create() {
System.out.println("Created at " + new SimpleDateFormat("HH:mm:ss").format(new Date()));
}
@PreDestroy
public void destroy() {
System.out.println("Destroyed at " + new SimpleDateFormat("HH:mm:ss").format(new Date()));
}
public void begin() {
conversation.begin();
conversation.setTimeout(10000);
System.out.println(conversation.getTimeout());
}
public void end() {
conversation.end();
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
Agradeço por qualquer ajuda!