2012-03-06 1 views
0

사용자 요청 및 계산을 처리하고 Threads 및 Runtime.exec() (Linux 및/또는 Windows)를 확장하여 서버의 실행 파일 (맞춤형)에 전달하는 웹 응용 프로그램 시스템을 개발하려고합니다. . 이러한 계산은 매우 많은 시간이 소요될 수 있으며 HttpSession 기간을 초과 할 수 있습니다. 이런 일이 발생하고 세션이 만료되면 스레드/프로세스도 HttpSession과 함께 종료됩니다 (맞습니까?).세션이 만료되기 전에 HttpSession 내에서 프로세스를 시작하고 다른 "소유자"에게 넘겨 주시겠습니까?

내 질문 : 세션 내에서 프로세스를 시작하고 세션 독립적 프로세스로 핸드 오버하는 방법이 있습니까?

프로세스 ID를 추적 할 수 없어도 상관 없습니다. 사용자 세션이 만료 된 경우에도 웹 서버에서 프로세스를 시작하고 실행하도록 검색 만합니다.

아이디어와 힌트에 감사드립니다! 당신 잡스의 HttpSession

+1

세션은 외부 프로세스와 아무 관련이 없지만 오랫동안 서블릿의 실행을 잠그는 것은 끔찍한 ** 접근 방법입니다. 당신은 어떤 종류의 비동기 메시지 시스템을 사용할 필요가 있습니다. – Viruzzo

+0

나는 Coolspot이 그것을 제안하고 있다고 생각하지 않으며 그것을 피하는 방법을 실제로 요구하고있다. –

+0

어쩌면 서버를 호출하는 페이지에서 설문 조사를 사용할 수 있습니다. 프로세스가 완료되면 세션이 만료되지 않도록 N 초 또는 분마다 요청합니다. –

답변

1

당신은 내가 Runtime.exec를 통해 프로세스를 시작하거나 웹 서버 내부에서 새로운 스레드를 생성 권하고 싶지 않다, Quartz 같은 작업 일정 libray를 사용해야합니다. 종종 기술적으로 가능하지만 좋은 생각은 아닙니다. 기본적으로 시작하려는 스레드는 웹 컨테이너 컨트롤 (요청을 처리 할 수있는 많은 작업자 스레드가 있음) 아래에 있지 않습니다. 자체 스레드를 시작하면 웹 서버가 자체로드를 더 이상 관리 할 수 ​​없으며 의도하지 않은 결과가 발생할 수 있습니다.

내가 뭘 할 것은 다음 새로운 계산을위한 요청이 들어 오면

  • , 나는 사용자 ID와 "계산 대기"로 DB에서 그 고유 ID를 생성하고 저장하는 것 .
  • 그런 다음 요청에 대한 데이터를 패키지화하고 계산을 위해 예정된 JMS 대기열에 배치합니다.
  • 웹 컨테이너는 해당 ID를 웹 브라우저에 반환 할 수 있습니다.
  • 웹 브라우저는 ID를 사용하여 "계산 ID이 아직 완료 되었습니까?"라는 웹 서버로 돌아갈 수 있습니다. 서버는 데이터베이스를 점검하고 상태가 "보류 중"인지 여부를 확인할 수 있습니다.
  • 웹 페이지에서 "처리 중 ..."메시지와 진행률 표시 줄을 표시하여 주기적으로 새로 고침하고 계산 진행 여부를 확인할 수 있습니다 (매 10 초마다 새로 고침). 그렇게하면 HttpSession을 계속 유지할 수 있습니다 (사용자가 다시 로그인하여 ID를 확인하거나 DB 레코드의 사용자 이름을 저장 한 경우 사용자의 "보류 중"계산 모두를 볼 수 있기 때문에 필요하지 않습니다).
  • 계산은 기본적으로 JMS/MQ 큐의 수신 메시지를 수신 한 다음 새 스레드를 만드는 별도의 응용 프로그램에 의해 수행됩니다. 이제 이것은 동일한 시스템이나 다른 시스템에있을 수 있습니다 (JMS를 사용하면 JMS 구성을 사용하거나 JMS 메시지를 수신하는 여러 "작업자"시스템을 사용하여 계산을 수행 할 수 있습니다)
  • 일단 계산이 완료되면 "worker"는 결과를 패키징하고 JMS 응답 메시지 (ID 포함)를 보냅니다.
  • 서버에 돌아와서 결과를 데이터베이스에 삽입하고 서버의 상태를 변경하는 메시지 구동 Bean을 사용할 수 있습니다. DB를 "finished"로 설정하고 결과를 사용 가능하게 만듭니다.
  • 이제 웹 페이지를 새로 고치면 결과를 사용할 수 있으므로 결과 페이지로 리디렉션하고 데이터베이스에서 결과를 얻을 수 있습니다.사용하여 JMS의

장점 : 문제가있는 경우

메시지를 지속 할 수
  • , 원망. 역사적 계산
  • 에서

    • 봐 계산하면 이전 계산의 결과를 볼 수 있었다 나무 등입니다 경우 : DB에 계산 결과를 저장

    장점을 준수

  • 자바 EE 사양.

희망이 있습니다.

+0

첫눈에 반가워요. 나는 그것을 볼 것이다. – Coolspot

1

의 전혀 의존하지 않도록