2011-03-12 4 views
1

내 응용 프로그램의 데이터베이스를 안드로이드에 업로드하기위한 서블릿이 있습니다.Tomcat - 응답 후 작업 수행

데이터베이스가 서버 측에서 처리되지만 다소 시간이 걸릴 수 있습니다.

지금 나는 PrintWriter.write()를 사용하여 업로드가 성공했다는 응답으로 막 돌아왔다.

응답을 클라이언트 (내 android 앱)로 보내서 파일 처리를 시작한 후 방법이 있습니까?

다른 서블릿으로 리디렉션을 보내거나 디스패처를 사용하여 요청을 전달하는 경우 처리를 수행하는 서블릿이 완료 될 때까지 응답하지 않습니다.

사용자에게 즉각적으로 응답하고 데이터베이스 처리를 시작한 다음 결과를 다시 Android에 전송하는 것이 가장 좋습니다 (데이터베이스에 따라 5 분 또는 10 분이 소요될 수 있음). 결과가 처리되고 클라이언트에 표시 될 준비가되었는지 여부를 서버에서 폴링하는 일종의 리스너가 필요하다고 가정)

답변

3

백엔드 처리는 작업을 통해 수행 할 수 있습니다. 석영을 통해. 서버를 JBoss AS, Glassfish 또는 Resin으로 대체 할 수 있다면 간단한 @Asynchronous 주석 메서드를 사용하여 여기에서 작업을 수행 할 수도 있습니다.

실제로 서버를 계속 폴링하여 이미 완료되었는지 묻습니다. 이것은 웹 환경에서 AJAX 기반 진행 막대의 대부분이하는 일입니다.

또는 반대쪽 AJAX (혜성)를 사용하여 폴링을 방지 할 수 있습니다 (예 : http://atmosphere.java.net/ 참조). 이 경우 서버는 완료 되 자마자 응답을 사용자에게 다시 보낼 수 있습니다. 이렇게하면 서버에서 일종의 이벤트가 필요합니다. 서버를 JBoss AS 또는 Glassfish로 교체 할 수 있다면 CDI 이벤트 버스가 옵션 일 수 있습니다. 그렇지 않으면 wait/notify를 호출하는 HTTP 세션의 공유 객체가 다른 대안입니다.

+0

그래서 바람둥이가 무슨 일을하려고하는지 궁금합니다. – kkudi

+1

전혀 아닙니다! 하지만 톰캣은 아주 맨손의 뼈다. 그것은 서블릿과 JSP를 구현하고 다른 것들은 거의 사용하지 않습니다. 추가 기능을 추가 할 수는 있지만 직접해야합니다. 앞서 언급 한 다른 서버에는 이미 해당 기능이 있습니다. –

+0

이것은 내 개인 프로젝트를위한 것이기 때문에, 프로덕션 준비가되어있는 것들과는 아무런 관계가 없습니다. JBoss는 다른 것을 권장하지 않는 한 당신이 처음에 말했던 것입니다. – kkudi