我有一个BusinessEJB,它正在创建一些数据库实体,它必须知道当前记录的主体。 这个EJB可以通过REST(通过另一个@Path带注释的代理EJB)调用,也可以从JAX-RS上下文调用 - 直接来自其他EJB - 甚至是EJB Sheduler;
问题是如何使用一个通用解决方案将主体传播到此EJB - 在JAX-RS调用期间,我可以从令牌获取主体(我尝试使用setSecurityContext,但它仅传播到@Path注释类 - 而不是传播到最终EJB)以及如何为来自EJB计时器调用的调用设置“系统”主体。 我已经使用了一些ThreadLocal解决方案,但我确信必须有一些正确的方法..
@Stateless
class BusinessEJB
{
public void createRecord() {
...
currentUser = ?????????
newEntity.setCreatetBy( currentUser.. );
}
}
@Path("/api")
class RestEJB {
@EJB
BusinessEJB businessEJB;
public void createRecord() {
businessEJB.createRecord();
}
}
class SchedulerEJB
{
@EJB
BusinessEJB businessEJB;
@Shedule
private void sheduleFn() {
// here we should set some system user context ???
businessEJB.createRecord();
}
}