2014-09-04 3 views
5

나는 Jersey documentation을 읽었습니다, 그리고 엔티티 (예 : response.readEntity (SomeObject.class)) 읽은 후 뉴저지 자동으로 연결을 닫습니다 말한다Jersey 클라이언트가 예외적으로 연결을 닫습니까?

그러나 예외가 발생하는 경우, 나쁜 요청 또는 중 하나 소켓 타임 아웃은 Jersey가 자동으로 연결을 닫지 않습니까, 아니면 client.close()를 호출하는 finally 절을 사용해야합니까?

답변

5

아니요. JerseyClient가 예외가있는 경우 client.close()을 호출하지 않으며 AutoCloseable도 구현하지 않습니다.

쉽게 테스트 할 수 있습니다. 당신은 마감 후 메소드를 호출하면 클라이언트는 IllegalStateException이 예외 :

Client client = ClientBuilder.newClient(); 
client.close(); 
client.target("http://stackoverflow.com").request().get(); // IllegalStateException 

을하지만 당신은 예외를 잡기 후 메소드를 호출 할 수 있습니다

Client client = ClientBuilder.newClient(); 
try { 
    client.target("http://foo.bar").request().get(); // java.net.ConnectException: Operation timed out 
} catch (Exception ex) { 
    client.target("http://stackoverflow.com").request().get(); // works 
} 

그래서 닫는 작업입니다.

업데이트 : JAX-RS 2.1 will use AutoClosables.

+0

감사합니다. lefloh – Jason

+0

저지 1.1x는 어떻습니까? API 문서를 확인했는데 close() 메소드가 없습니다. destroy() 만 사용할 수 있지만 동등하지 않다고 생각하지 마십시오. – DerekY

+0

ApiDoc에서 : "클라이언트를 삭제하십시오. 클라이언트와 관련된 모든 시스템 리소스가 정리됩니다." 따라서 연결을 닫아야합니다. – lefloh

관련 문제