2017-04-25 4 views
4

우리 회사에서는 wildfly 10.1 내에서 실행되는 준 표준 REST 서비스를 개발 중입니다. 각 요청은 필터에 의해 인터셉트 될 테넌트 (tenant) 헤더를 소유하고 나머지 또는 서비스 레이어 내에서 나중에 사용하기 위해 테너 정보가 @RequestScoped 빈 내에 저장됩니다. 여태까지는 그런대로 잘됐다. 이제 서비스 내의 일부 코드가 Java 8 병렬 스트림을 사용 중이며 @RequestScoped 빈을 사용하여 현재의 테넌트를 조회하지 못했습니다. 이 부분을 여러 번 확인했습니다. 비 병렬 스트림을 사용하면이 문제가 해결되었습니다.느슨한 것은 정상입니까? Java 8 병렬 스트림을 사용할 때 Java EE Request Scope?

정상적인 동작입니까? 표준 Java 8 기능을 사용하면 컨테이너 동작이 정상적으로 작동하지 않는다는 사실에 정말 혼란 스럽습니다.

우리가 신경 써야 할 다른 범인이 있습니까?

+2

관련 정상 : http://stackoverflow.com/questions/36338505/completablefuture-parallelstream-in-javaee-app-server – assylias

답변

4

It seems보다 병렬 인 경우 관리되는 컨텍스트에서도 스레드가 생성됩니다.

그러나 RequestScoped는 ThreadLocal을 사용하여 처리됩니다 (우리는 여전히 이전의 좋은 멀티 스레드 모델, 즉 http 요청 = 1 스레드).

그래서 네, 그것은

+0

어쩌면이 – Gab

+2

이보기 제이보스하는 버그로보고해야 : https://issues.jboss.org/browse/CDI-587 – maress