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