2013-06-12 3 views
1

다음 문제에 대한 해결책을 찾으려고합니다. 현재 jax-ws에서 작동하는 동기화 된 웹 서비스가 있습니다.비동기 웹 서비스

내가해야 할 일은 클라이언트 요청이 동기화 된 상태로 유지되는 즉, 요청을 보내고 클라이언트가 응답을 되 찾을 때까지 차단된다는 것입니다.하지만 서버 측은 asyncronized가됩니다.

또한 시스템이 많은 요청을 수신하고 각 요청이 최악의 경우 (몇 초) 시간이 걸릴 수 있으므로 가능한 한 적은 리소스를 사용하는 솔루션이 필요합니다.

서블릿 3.0이이 모든 요구 사항에 응답하고 있지만 웹 서비스와 함께 사용할 수 없다는 것을 알고있었습니다. 사실입니까?

클라이언트 요청을 수신하는 대기열과 클라이언트가 응답을받을 다른 대기열을 정의 할 수있는 jms 이상의 webservice라는 것이 있습니다. 그러나 어떤 예도 보지 못했습니다. 클라이언트가 실제로 동기화 된 방식으로 작업하는 경우 작동 방식에 대해 설명합니다.

의견이 있으십니까?

Handle submitRequest(Request request) 

그래서이 기능은 당신의 요청을 수락하고, 즉시 반환 : 고급의

감사합니다, 오렐

+0

https://weblogs.java.net/blog/ramapulavarthi/archive/2010/08/18/new-asynchronous-servlet-transport-jax-ws-ri –

+0

의견을 보내 주셔서 감사합니다. unfurthenatly 나는 weblogic 10.3.6을 사용하고 있기 때문에 서블릿 3.0을 사용할 수 없습니다 ... 다른 해결책이 있습니까? – Orel

답변

0

당신은 티켓/손잡이/토큰을 반환하는 웹 서비스를 디자인 할 수 있습니다.

나중에 클라이언트에서 결과를 폴링 할 수 있으므로 다른 기능이 필요합니다.

Result poll(Handle handle) 

이며 요청 처리가 완료된 경우 결과는 null이 아닙니다.

클라이언트에서 폴링 기능 호출 사이에서 잠자기 상태 (또는 진행률 막대를 업데이트 할 수 있음).

두 기능 모두 서버 측에서 리소스가 거의 필요하지 않습니다. 열린 HTTP 연결이 필요 없습니다. JMS를 기반으로하는 비동기 처리 엔진의 프런트 엔드 역할을합니다.

한편 비즈니스 요구 사항에 따라 폴링 빈도 또는 휴면 기간을 각각 조정해야합니다 (예 : 100ms, 250ms, 500ms, 1s, 2s, 3s).

업데이트 : 클라이언트를 변경할 수없는 경우

는, 서버가 비동기 결과에 대한 서비스 측의 클라이언트를 대신 폴링 수 있습니다. 그러나이 방법은 연결이 열려 있으므로 시간 제한에주의해야합니다.

+0

안녕하세요, 문제는 요청 응답 방식으로 작업중인 클라이언트 측 현재 구현을 변경할 수 없다는 것입니다. 서버 측만 바꿀 수 있습니다. – Orel

+0

답변에 대한 업데이트를 추가했습니다. – Beryllium