2015-01-02 2 views
4

Grails 스레드 안전의 HTTPBuilder입니까?Grails HTTPBuilder는 안전합니까?

HTTPBuilder가 Grails 서비스 클래스에 연결되어 있다면 안전하게 사용할 수 있습니까? 아니면 모든 호출에 대해 인스턴스화해야합니까?

Grails의 HTTPBuilder가 스레드로부터 안전한지 여부에 대한 구체적인 대답은없는 것 같습니다. 특정 부분에 관한 문서가 부족하기 때문에 안전하지 않은 스레드로 가고 싶지만 확실한 대답을 원합니다.

코드는 동일한 컨텍스트 (헤더, 인증 자 등)를 사용하여 동일한 URL로 이동하는 한 여러 스레드에서 여러 요청을 처리하는 것이 좋습니다.

+0

Downvoted 때문에? – Thihara

+0

Upvoted 때문에. –

답변

3

groovyx.net.http.HTTPBuilder을 의미합니까? 메소드 호출로 수정되는 여러 필드가 있으며 동기화 나 잠금이없고 스레드 안전 콜렉션이나 다른 클래스를 사용하지 않으므로 스레드 안전하지 않다. 대부분의 빌더는 비슷하게 상태가 좋으며 스레드로부터 안전하지 않다고 가정해야합니다.

+0

생성자 이외의 호출 메소드에 의해 실제로 수정되는 필드는 무엇입니까? 스레드 풀에 호출을 제출하고 스레드 안전 연결 관리자를 사용하여 HttpBuilder를 확장하는 AsyncHttpBuilder http://groovy.codehaus.org/modules/http-builder/doc/async.html이 있습니다. 그러나 HttpBuilder 필드가 메서드 호출에 의해 수정 된 경우 작동하지 않을 것입니다 ... –

+0

Lots :) 한 예로 -'setHeaders'는'StringHashMap'의 인스턴스 인'defaultRequestHeaders'에'clear'을 호출하고 단순합니다 HashMap의 서브 클래스 여러 개의 뮤 테이션이 있습니다 (예 : 'setEncoderRegistry','setParserRegistry' 등등. –

+0

맞습니다.하지만 명시 적으로 호출해야합니다. 동일한 헤더를 사용하여 같은 요청을하면 작동 할 수 있습니다. 'getClient'도 게으르지 만 약간의 문제가 발생할 수 있습니다. AsyncHTTPBuilder는 약간 오도 된 것입니다. –