Передать значение заголовка из веб-уровня в 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 ответ

Реализация правильная, но кажется ненужной оптимизацией с использованием побочных эффектов.

Другие вопросы по тегам