Java 当从JAX-RS和EJB调度程序/CXF、OpenEJB调用相同的EJB时,如何传播主体

Java 当从JAX-RS和EJB调度程序/CXF、OpenEJB调用相同的EJB时,如何传播主体,java,jakarta-ee,ejb,jax-rs,Java,Jakarta Ee,Ejb,Jax Rs,我有一个BusinessEJB,它正在创建一些数据库实体,它必须知道当前记录的主体。 这个EJB可以通过REST(通过另一个@Path注释的代理EJB)调用,也可以从JAX-RS上下文中调用——直接从其他EJB调用——甚至是EJB调度程序调用 问题是如何使用一个通用解决方案将主体传播到此EJB—在JAX-RS调用期间,我可能会从令牌中获取主体(我尝试设置SecurityContext,但它只传播到@Path注释类—而不是最终EJB),以及如何为EJB计时器调用的调用设置“系统”主体。 我使用了一

我有一个BusinessEJB,它正在创建一些数据库实体,它必须知道当前记录的主体。 这个EJB可以通过REST(通过另一个@Path注释的代理EJB)调用,也可以从JAX-RS上下文中调用——直接从其他EJB调用——甚至是EJB调度程序调用

问题是如何使用一个通用解决方案将主体传播到此EJB—在JAX-RS调用期间,我可能会从令牌中获取主体(我尝试设置SecurityContext,但它只传播到@Path注释类—而不是最终EJB),以及如何为EJB计时器调用的调用设置“系统”主体。 我使用了一些本地解决方案,但我相信一定有合适的方法

@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();
   } 
} 

您是否尝试过使用
SessionContext#getCallerPrincipal()
?您是否尝试过使用
SessionContext#getCallerPrincipal()
?和