2011-02-09 5 views
2

예약 된 작업 클래스에서 컨트롤러에 포함 된 메소드를 호출하려고합니다.Grails 예약 된 작업에서 컨트롤러 메소드를 호출하십시오. grails 애플리케이션에

이 [http://www.grails.org/Job+Scheduling+(Quartz)]을 읽으면 데이터 소스와 서비스가 직업 수업에서 이름으로 자동 연결된다는 것을 알 수 있습니다. 컨트롤러가 기본적으로 불가능한 것 같습니다. 왜냐하면 컨트롤러가 이런 종류의 일을하지 않기 때문입니다.

그런데 Grails에서 작업에서 호출 된 컨트롤러 메서드를 가져 오는 방법이 있습니까? 그리고 이것은 이것이 당신에게 나쁜 관행 일 수 있습니까? 사전에

감사합니다, 루카

답변

8

그것은 컨트롤러는 웹 요청을 처리하기위한 것입니다 때문에 나쁜 습관이다 - 사용자 세션과 모든 것을.

Quartz 작업에는 사용자 세션이 없다.

두 번째로 컨트롤러의 기능을 유지하는 것은 나쁘다. 컨트롤러는 다른 비즈니스 로직 메서드에 대한 호출 만 "제어"해야한다.

src에서 모든 기능을 서비스, 도메인 클래스 또는 POGO 클래스로 이동하는 것이 좋습니다.

물론 new MyController().method()을 호출 할 수 있지만 기본적으로 빈은 컨트롤러에 삽입되지 않습니다.

+0

답장을 보내 주셔서 감사합니다. 저는 여러분과 제 컨트롤러가 정확하게 이런 방식으로 작동하고, 실제로 흐름을 제어하고 실제로 수행하는 서비스를 호출하는 것에 동의합니다. 문제는 올바른 코드로 서비스를 호출하기 위해 중복 된 코드를 피하는 방법을 찾고 있다는 것입니다. 아마도 대답은 리팩토링 (refactor)이며 클래스의 모든 기능을 src에 넣는 것입니다. – lucke84

+1

글쎄, 서비스는 POGO 클래스에 주입되지 않을 것이다. 그래서 다른 서비스를 제어하려고한다면, 모든 빈을로드하는 것이 조금 과장 될 것이다. 왜 서비스 처리 로직을 다른 서비스로 옮기지 않습니까? –

+0

네, 맞습니다. 고마워 빅터 – lucke84

관련 문제