2011-09-28 2 views
2

컨트롤러에서 비동기 적으로 작업을 시작한 다음 템플릿을 렌더링한다고 가정 해 보겠습니다. .재생! - 동적으로 작업 끝내기

수입 play.jobs *;

MyJob job = new MyJob(); 
job.doJob(); 

render(); 

MyJob 같은 보이는

public class MyJob extends Job { 

    public void doJob() { 
     // execute some application logic here until I say to quit via a controller method 
    } 

} 

UI에서 일부 작업을 수행하고 작업을 종료 할 컨트롤러의 다른 경로에 대한 요청을 트리거합니다. 복잡하고 연속적인 DAO 작업을 클라이언트 측에서 처리하고 싶지 않으므로이 문제를 해결하는 가장 좋은 방법은 무엇입니까? EC2 탄성 캐시 설정이있어서 주된 문제는 ID를 작업에 할당하는 것입니다.

job.endJob(id); ? 

답변

2

JobsPlugin 클래스를 보면 - ScheduledThreadPoolExecutor executor을 사용하여 작업 목록을 유지 관리합니다.

이 클래스에는 시도 할 수있는 remove 메서드가 있습니다.

0

나는 쉽게 작업을 중지 할 수있는 방법을 모르겠다. Play는 상태를 유지하지 않으므로 데이터베이스에서 작업을 중단하기로 확인할 수있는 플래그를 지정하는 것이 가장 좋지만 나에게 큰 해결책은 아닙니다.

Play에서 Continuations을 확인 했습니까? 나는 그들이 당신의 시나리오에 더 잘 어울릴 것이라고 믿습니다.

+0

나는 그것을 보았다. 그러나 나는 다른 것을 돌려 줄 것을 요구할 필요가있다. 플래그를 확인하기 위해 싱글 톤을 사용하기로 결정했습니다. 그것은 꽤 아니지만, 자바 스크립트에 덜 아름답습니다 :) –

0
private static ScheduledFuture<?> future; 
private static final TestJob testJob = new TestJob(); 

future = JobsPlugin.executor.scheduleWithFixedDelay(testJob, 1, 1, TimeUnit.SECONDS); 

future.cancel(true); 

future = JobsPlugin.executor.scheduleWithFixedDelay(testJob, 5, 5, TimeUnit.SECONDS); 
관련 문제