2010-02-22 2 views
6

일부 데이터 (일부 파일 생성 및 반환) 수집, 데이터베이스에 저장, 일부 이미지 생성 및이 모든 것을 표시하는 Wicket + Hibernate + Spring 웹 응용 프로그램을 설치했습니다 웹 페이지에서.Wicket : 장기 실행 작업을 처리하는 방법

이 모든 것은 짧은 실행에는 문제가 없지만 때로는 데이터를 수집하는 데 (일부 원격 번호 크런치가 포함됨) 너무 오래 걸리고 (20 분 이상) 시간이 초과됩니다. 두 가지 방법을 사용하여이 문제를 해결하기 위해 노력했지만 두 가지 모두 몇 가지 문제점을 보여줍니다.

첫 번째 방법은 AjaxLazyLoadPanel 초를 사용하고 getLazyLoadComponent에서 모든 작업을 수행하는 것이 었습니다. 짧은 실행에는 문제가 없지만 20 분 이상 실행하면 LazyLoadComponents가 시간 초과로 인해로드되지 않습니다.

두 번째 방법은 숫자 조각에 생성 된 파일을 폴링하여 기간이 10 초인 AjaxSelfUpdatingTimerBehavior이 추가 된 중간 단편을 만드는 과정입니다. 이것은 문제없이 백그라운드에서 작업을 실행하는 것으로 보이지만 반환 된 데이터를 데이터베이스에 저장해야 할 때 실패합니다. 뷰 패턴에서 열린 세션을 사용하고 있지만 20 분 후에 데이터를 저장하려고 시도하면 실패 할 수 있습니다. ?? (해결책은 이것을 해결할 수 있습니다 ..). 때문에 지금이 긴 실행 작업을 처리하기 위해 대체 방법에 독서를하고있어 위의 문제에

에 걸쳐 온 :

지금 궁금하네요 이들 중 하나가 작업을 실행하고 나중에 데이터베이스에 데이터를 저장하는 데 시간 초과 문제를 해결하는 데 더 적합하거나 다른 사람이이 상황에서 도움이 될만한 다른 솔루션을 가지고있는 경우에 적합합니다.

언젠가는 작동하지 않을 수도있는 뭔가를 구현하기 전에 새로운 접근 방식이 실행 가능한지 알고 싶습니다.

안부,

답변

3

나는 우리가 부착 AjaxSelfUpdatingTimerBehavior와 패널을 사용하여 성공이 있었다 알고있다. 태스크와 결과는 뷰 로직과 분리되어 있지만 작성한 서비스를 통해 뷰에 액세스 할 수 있습니다. 우리가 사용한 서비스 구현은 개별 작업을 실행하기위한 TheadPool 또는 ExectutorService를 시작하는 책임이 있습니다. 이 서비스는 발생하는 특정 작업/통화의 진행/상태를 모니터링하는 방법을 제공 할 수 있습니다. 완료되면보기에 데이터를 사용할 수있게해야합니다. SessionFactory를 서비스 구현체 (또는 주입 된 DAO)에 삽입하면 WebSession 외부에서 HibernateSession을 생성하기에 충분하다.

+0

감사합니다. 질문을 게시 한 후에 생각한 것입니다. 질문을 공식화하는 것은 마치 고무 덕킹과 같습니다. 나는 로그가 시간 초과 세션에 관해 아무것도 기록하지 않기 때문에 이것이 실제로 문제를 해결할 수 있는지 알아봐야 할 것입니다. 데이터베이스에 결과가 없다는 것만으로도 문제가 있습니다. 더 많은 정보가 있으면 업데이트 될 것입니다. – Tim

+1

이 접근법을 끝내고 이후 아무런 문제가 없었습니다 .. 감사합니다! – Tim

+0

Tim을 잘 듣고 있습니다. – Matt

관련 문제