소개 웹 서비스 엔드 포인트에서 사용하는 경우의 수는 사용중인 프레임 워크에 따라
.
간단한 엔드 포인트 (즉, Apache CXF 또는 Spring 웹 서비스와 함께 JAX-WS)를 사용하면 모든 스레드/요청 (예 : 서블릿)에 대해 단일 서비스 인스턴스를 갖게됩니다. 따라서 정의상 이러한 종류의 서비스는 무국적자가 될 수 있습니다. 그러나 서비스에 일부 상태를 추가해야하는 경우이를 수행 할 수 있지만 서비스 스레드를 안전하게 만드는 것은 개발자의 몫입니다.
EJB를 사용하면 유연성이 향상됩니다. stateless beans를 사용하는 경우 모든 요청을 관리하기위한 인스턴스 풀이 있습니다 (poolSize = 1 인 경우 Apache CXF의 동일한 동작을 얻음). 다시 말하지만, 상태 비 저장 빈에 상태를 추가 할 수는 있지만 관리 할 인스턴스 풀이 있으므로 스레드 안전성을 높이는 것이 훨씬 어렵습니다. 그러나 상태가 필요한 경우에는 상태 기반 빈을 사용하여 스레드 안전성에 대한 사용자의 작업을보다 쉽게 만드는 프레임 워크를 사용할 수 있습니다. 당신이 당신의 서비스에 상태를 유지하지 않는 경우 서비스 상태에 대한
일부 힌트는
웹 서비스는 스레드 안전합니다. 즉, 정의에 의해 스레드 안전 인 경우 Stateless 서비스입니다.
모든 스레드/요청이 공유해야하는 상태가 필요한 경우 상태 비 저장 서비스 (JAX-WS 또는 poolSize = 1 인 상태 비 저장 세션빈)에 상태를 추가 할 수 있지만 스레드 안전성을 유지해야합니다. , sycn 블록을 추가하십시오 (귀하의 @WebMethod
을 동기화하지 마십시오). 중요 : 이론적으로 (그리고 실제로) 상태 저장없는 세션 빈에 상태를 추가하면 안됩니다. 왜냐하면 풀은 "원할"때 인스턴스를 삭제하거나 만들 수 있기 때문입니다.
현재 스레드/요청에 의해서만 사용되는 상태를 유지해야하는 경우 ThreadLocal
변수를 사용하거나 상태 기반 세션 빈을보다 쉽게 사용하여 상태가없는 서비스에 상태를 추가 할 수 있습니다. 그들이
다른 유일한 :-) 온 상태가 안 : 지금, 마지막으로, 귀하의 질문에 대답
- 무 상태 세션 빈 스레드 당신이 그들을 스레드에 안전 할 경우에만 그리고 만약 안전 기본 웹 서비스와 Stateless Session Bean 웹 서비스 사이에서 첫 번째 인스턴스가 단일 인스턴스를 갖고 두 번째 인스턴스가 인스턴스 풀을 사용하는 경우. poolSize = 1이면 동일한 효과를 얻지 만 이론적으로 풀은 "원할 때"인스턴스를 파기 할 수 있습니다.
당신의 응답을
덕분에,이 도움이 기대. 니가 끝냈어. 그래도 공식적인 참고 링크를 공유해 주시겠습니까? –
공식적인 브리핑을 찾기는 어렵지만 찾으려고 노력할 것입니다. – ggarciao