从JAX-RS和EJB Sheduler / CXF,OpenEJB调用同一个EJB时如何使用Principage

时间:2015-11-06 07:15:30

标签: java java-ee ejb jax-rs

我有一个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();
   } 
} 

0 个答案:

没有答案