공용 EJB 메소드에 대한 비동기 호출의 결과로 EJB 컨테이너의 스레드 풀에 의해 할당 된 다른 자식 스레드에 전달할 InheritableThreadLocal 변수가 있습니다. 비동기 호출을 시작하는 부모 호출자는 Stateless EJB 인 REST 리소스입니다. InheritableThreadLocal은 자식 스레드가 새로 생성 될 때만 자식 스레드에 값을 전달합니다. 스레드가 풀에 생성되면 서버가 반송 될 때까지 스레드를 파괴하지 않습니다.ThreadLocal 변수를 EJB 컨테이너에 전달 스레드 풀
위의 사실을 고려할 때, 내 사례의 하위 스레드는 EJB 컨테이너가 유지 관리하는 스레드 풀에서 비롯됩니다. 서버가 시작된 후 처음 Resource가 호출되거나 Threadpool에서 방금 생성 된 새로운 스레드가 자식 스레드로 할당 된 경우에만 InheritableThreadLocal 전달 값을 자식 스레드로 전달합니다. 다른 모든 경우에는 스레드가 생성되어 첫 번째 할당 된 때 풀에서 자식 스레드에 할당 된 초기 값을 얻고 있습니다.
IBM WebSphere에서 코드를 실행하고 비동기 호출의 메소드 매개 변수로 ThreadLocal 값을 전달하는 것이 옵션이 아닙니다.
각 실행에 대해 하위 스레드에 할당 된 현재 값을 얻을 수 있도록 ThreadLocal 값을 다시 할당 할 수 있습니까?
아래 링크는 다소 비슷하지만 ThreadPool은 EJB 컨테이너에서 제공 한 것입니다.
Propagating ThreadLocal to a new Thread fetched from a ExecutorService
답을 얻지 못하면 일부 코드 단편을 추가하여 사람들이 올바르게 읽는지 확인하는 것이 좋습니다. –