gpt4 book ai didi

jsf - 全局设置 CDI session 超时

转载 作者:行者123 更新时间:2023-12-04 15:12:07 25 4
gpt4 key购买 nike

是否可以为注入(inject) @Named bean 的所有对话对象全局设置对话超时?

我有几个 @ConversationScoped bean,例如:

import javax.annotation.PostConstruct;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;

@Named
@ConversationScoped
public class SomeBean1 {

@Inject
private Conversation conversation;

@PostConstruct
private void init() {
if (conversation.isTransient()) {
conversation.begin();
}
}
}

@Named
@ConversationScoped
public class SomeBean2 {

@Inject
private Conversation conversation;

@PostConstruct
private void init() {
if (conversation.isTransient()) {
conversation.begin();
}
}
}

这些对话的默认超时为 600000 毫秒。我想知道是否有任何方法可以全局设置对话超时,或者我需要在每个 bean 中设置它
if (!conversation.isTrainsient()) {
conversation.setTimeout(MY_CUSTOM_TIMEOUT);
}

(问题是有很多 CDI bean 并且在每个中手动设置超时不是最好的解决方案)

最佳答案

所以,这是我使用的解决方案(Oracle WebLogic 12c,WELD 1.1.Final):

import org.jboss.weld.context.http.HttpConversationContext;

import javax.inject.Inject;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

@WebListener
public class SessionListener implements HttpSessionListener {

@Inject
private HttpConversationContext conversationContext;

@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
if (conversationContext != null) {
final long DEFAULT_TIMEOUT = 2 * 60 * 60 * 1000;
if (conversationContext.getDefaultTimeout() < DEFAULT_TIMEOUT){
conversationContext.setDefaultTimeout(DEFAULT_TIMEOUT);
}
}
}

@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {}
}

上下文被注入(inject)到监听器中,并在用户启动 session 时设置超时。

关于jsf - 全局设置 CDI session 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19109550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com