gpt4 book ai didi

java - EJB3.1 TimerService @Timeout 当前主体

转载 作者:行者123 更新时间:2023-11-30 05:01:24 35 4
gpt4 key购买 nike

我有一个关于身份验证和 TimerService @Timeout 注释的问题:

在我们的应用程序中,用户可以安排任务以给定的时间间隔执行,他们从任务列表中进行选择,每个任务都与应用程序中的特定 EJB 相关联。当用户按下保存按钮时,一个新的计时器将添加到 Timer 服务中,当调用 @Timeout 方法时,将使用 @Timeout 方法调用用户指定的 EJB 上的方法

当 Timerservice 调用超时方法时,当前主体是“ANONYMOUS”。如果您需要从 timout 方法中调用任何 protected EJB,这就会出现问题。是否可以将当前主体和角色更改为与创建计时器的用户相同的主体和角色?

@Singleton
@LocalBean
public class TestEJB
{

@Resource
SessionContext context;
@Resource
TimerService timerService;

@Timeout
public void execute(Timer timer) throws Exception {
//Get the current username
System.out.println(context.getCallerPrincipal().getName());
}

public void createScheduledTimer(ScheduleExpression e,String timerId) throws IllegalArgumentException, IllegalStateException, EJBException {
TimerConfig tc = new TimerConfig();
tc.setInfo(timerId);
tc.setPersistent(true);
timerService.createCalendarTimer(e, tc);
}

}

最佳答案

我们在 Glassfish 中做到了这一点。在我们的例子中,我们有一个通用的 Timer bean,它可以运行多个任务中的任何一个,而不是像您所做的那样每个任务一个 bean,但概念是相同的。

我们最终做的是在提交任务时记录用户,然后我们利用 Glassfish 的特定 ProgramaticLogin 工具在计时器启动时重新登录用户。这样,整个 EJB 安全上下文就可以为用户和任务正确设置。

关于java - EJB3.1 TimerService @Timeout 当前主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6584264/

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