java - IncationContext 是否传播到嵌套方法

标签 java ejb

我需要从父级发送到嵌套方法参数

我定义了一个 EJB 拦截器并在业务方法级别使用它 我需要在嵌套方法中了解应从父调用程序方法(非业务数据)发送的一些信息,这些信息将在 aduit 中使用 所以,我的问题是,InitationContext 是否传播到嵌套方法

最佳答案

我也遇到了类似的问题。据我所知,上下文不会传播到嵌套方法,至少它对我不起作用。如果您有一个 Activity 事务(使用 EJB 时,您可能有一个事务),您可以尝试使用 TransactionScoped bean 。如果没有事务,您可能会尝试定义自定义 bean 范围(在 CDI 中),但我没有尝试这样做。查看 TransactionScoped bean 的可能实现。

@SetAuditData
public void someMethod(String user, String foo...) throws Exception {

}

和拦截器(为简单起见,假设参数是第一个参数,它是一个字符串)

@SetAuditData
@Interceptor
public class AuditInterceptor {

    @Inject
    AuditTransactionalBean auditData;

    @AroundInvoke
    public Object setAuditData(InvocationContext ctx) throws Exception {
        Object[] parameters = ctx.getParameters();
        String user = (String) parameters[0];
        auditData.setData(user);
        return ctx.proceed();
    }
}

还有一个保存数据的 bean(必须是可序列化的才能钝化)

@TransactionScoped
public class AuditTransactionalBean implements Serializable {

    String data;

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data=data;
    }
}

然后可以将该 bean 注入(inject)到嵌套 bean/方法中。

关于java - IncationContext 是否传播到嵌套方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23471714/

相关文章:

java - 如果方法不保留任何实体,那么制作 TransactionAttributeType.NOT_SUPPORTED 是否好

jakarta-ee - EJB 3.1 中的简单例份验证

Java应用程序设计建议: storing image

java - 我应该使用哪个 GWT EventBus?

java - 如何在单元测试中模拟 InitialContext 构造函数

multithreading - 在单例 session Bean 中管理并发访问

Java TimerService 下一次执行时间是过去

java - 每分钟或其他情况下运行一个线程

java - 通过 onejar 插件使用反射

Java - 根据两个属性值对 JSONArray 进行排序