【问题标题】:Pass a header value from web-tier to EJB with @RequestScoped bean?使用 @RequestScoped bean 将标头值从 Web 层传递到 EJB?
【发布时间】:2016-04-02 02:13:03
【问题描述】:

我应该将一些带有来自请求的 HTTP 标头的信息传递给 EJB,并且我不想添加参数并将它们传递到我需要它们的任何地方。所以我使用 RequestScoped bean 来保存我的标头值。这个实现可以吗,还是我误解了@RecuestScoped bean 的概念?

首先我使用拦截器 (Resteasy) 获取标头,并将它们保存到我的 request scoped bean 中:

@Provider
@ServerInterceptor
public class SomeInterceptor implements PreProcessInterceptor {

    @Inject
    ApplicationRequestContext appContext;

    @Override
    public ServerResponse preProcess(HttpRequest request, ResourceMethod resourceMethod)
            throws Failure, WebApplicationException {
        List<String> values = request.getHttpHeaders().getRequestHeader("Some-Header");
        if(values != null && values.size() > 0) {
            appContext.setSomeHeader(values.get(0));
        }
        return null;
    }
}

这是豆子:

@RequestScoped
public class ApplicationRequestContext implements Serializable {
    private String someHeader;

    public void setSomeHeader(String someHeader) {
        this.someHeader = someHeader;
    }

    public String getSomeHeader() {
        return someHeader;
    }
}

然后我可以从我的 EJB 访问值(在每个请求中都不同):

@Stateless
public class CheckInWorkflow {

    @Inject
    ApplicationRequestContext appContext;

    public void someEjbMethod() {
        doSomethingWithThisHeaderValue(appContext.getSomeHeader());
    }
}

根据@RequestScoped 的描述,这应该可以按预期工作:

请求范围处于活动状态:

  • 在 Web 应用程序中任何 servlet 的 service() 方法期间、任何 servlet 过滤器的 doFilter() 方法期间以及容器调用任何 ServletRequestListener 或 AsyncListener 时,
  • 在任何 Java EE Web 服务调用期间,
  • 在任何 EJB 的任何远程方法调用期间、在任何 EJB 的任何异步方法调用期间、在对 EJB 超时方法的任何调用期间以及
  • 在消息传递到任何 EJB 消息驱动 bean 期间,以及在任何消息传递到从 Java EE 组件环境获得的 JMS 主题或队列的 MessageListener 期间。

【问题讨论】:

  • 您的测试结果如何?它做你想做的事吗?它是否按您预期的那样工作?
  • 测试工作到目前为止...而且我读到的关于 CDI 的所有内容似乎都符合我的计划。我从 ManagedBeans 的(Web)上下文中了解了更多 @RequestScope'd bean,因此在我的场景中使用它感觉不自然。
  • 如果一切都按预期工作,并且此解决方案适合您,并且您看到的内容与文档相匹配,那么您不必担心。

标签: java rest jakarta-ee cdi requestscope


【解决方案1】:

实现是正确的,但使用副作用似乎是不必要的优化。

【讨论】:

    猜你喜欢
    • 2011-03-11
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多