Я должен передать некоторую информацию, поступающую с заголовком HTTP из запроса в EJB, и я не хочу добавлять параметры и передавать их везде, где они мне нужны. Поэтому я использовал bean-компонент RequestScoped для хранения значений заголовков. Подходит ли эта реализация или я неправильно понимаю концепцию bean-компонентов @RecuestScoped?
Сначала я получаю заголовки с помощью перехватчика (Resteasy) и сохраняю их в свой bean-компонент request scoped:
@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 это должно работать как положено:
Область запроса активна:
- во время метода service() любого сервлета в веб-приложении, во время метода doFilter() любого фильтра сервлета и когда контейнер вызывает любой ServletRequestListener или AsyncListener,
- во время любого вызова веб-службы Java EE,
- во время любого удаленного вызова метода любого EJB, во время любого асинхронного вызова метода любого EJB, во время любого вызова метода ожидания EJB и
- во время доставки сообщения в любой EJB-компонент, управляемый сообщениями, и во время доставки любого сообщения в MessageListener для темы или очереди JMS, полученной из среды компонентов Java EE.