Step을 확장하기 위해 가장 먼저 생각나는 확장포인트는 AbstractStep 일것이다. 하지만 이녀석을 확장한다면 스프링 배치의 스텝을 사용하지 않는것과 같다. 왜냐하면 스텝의 중요한 기능들은 ItemOrientedStep에서 구현하고 이녀석은 AbstractStep 을 확장한 것이기 때문이다.
두번째로는 AbstractStepFactoryBean이 있다. 이녀석을 확장하는것 역시 AbstractStep을 확장하는것과 별반 다르지 않다.
그렇다면 ItemOrientedStep을 확장해야 하는가? 그것또한 쉽지않다. ItemOrientedStep만으로는 skip정책과 retry 정책등과 같은 필수적인 기능들을 제공하지 않기 때문이다. 이러한 정책들은 AbstractStepFactoryBean을 상속한 SimpleStepFactoryBean과 또 이 클래스를 상속한 SkipLimitStepFactoryBean에서 세팅해준다.
이쯤에서 드는 생각은 ItemOrientedStep과 SkipLimitFactoryBean을 확장하면 될것같다는 생각이 들것이다. 하지만 이것또한 답은 아닌것 같다 왜냐하면 AbstractStepFactoryBean은 FactoryBean 인터페이스를 구현한다. 그런데 AbstractStepFactoryBean에서 구현한 getObject메소드를 final로 막아버렸다. 그래서 SkipLimitFactoryBean을 확장한다고 해도 ItemOrientedStep을 확장한 스텝을 생성할 수가 없다
이쯤에서 한번 생각해볼 문제가 왜 데이브는 getObject메소드를 오버라이딩 하지 못하게 막았을까하는 점이다. 분명 우리보다 뛰어난 사람일 텐데 그렇게 한 이유가 분명히 있을것이다
여기까지가 저번주 목, 금 이틀동안 삽질한 결과이다. 답은 전혀다른 곳에 있었다. 생각을 유연하게 하고 기술에 얽매이지 않으면 답이 보일것이다.
두번째로는 AbstractStepFactoryBean이 있다. 이녀석을 확장하는것 역시 AbstractStep을 확장하는것과 별반 다르지 않다.
그렇다면 ItemOrientedStep을 확장해야 하는가? 그것또한 쉽지않다. ItemOrientedStep만으로는 skip정책과 retry 정책등과 같은 필수적인 기능들을 제공하지 않기 때문이다. 이러한 정책들은 AbstractStepFactoryBean을 상속한 SimpleStepFactoryBean과 또 이 클래스를 상속한 SkipLimitStepFactoryBean에서 세팅해준다.
이쯤에서 드는 생각은 ItemOrientedStep과 SkipLimitFactoryBean을 확장하면 될것같다는 생각이 들것이다. 하지만 이것또한 답은 아닌것 같다 왜냐하면 AbstractStepFactoryBean은 FactoryBean 인터페이스를 구현한다. 그런데 AbstractStepFactoryBean에서 구현한 getObject메소드를 final로 막아버렸다. 그래서 SkipLimitFactoryBean을 확장한다고 해도 ItemOrientedStep을 확장한 스텝을 생성할 수가 없다
이쯤에서 한번 생각해볼 문제가 왜 데이브는 getObject메소드를 오버라이딩 하지 못하게 막았을까하는 점이다. 분명 우리보다 뛰어난 사람일 텐데 그렇게 한 이유가 분명히 있을것이다
여기까지가 저번주 목, 금 이틀동안 삽질한 결과이다. 답은 전혀다른 곳에 있었다. 생각을 유연하게 하고 기술에 얽매이지 않으면 답이 보일것이다.