diff --git a/src/main/java/cokr/xit/foundation/component/ScheduledBean.java b/src/main/java/cokr/xit/foundation/component/ScheduledBean.java new file mode 100644 index 0000000..3341b67 --- /dev/null +++ b/src/main/java/cokr/xit/foundation/component/ScheduledBean.java @@ -0,0 +1,31 @@ +package cokr.xit.foundation.component; + +/**지정한 일정에 따라 작업을 수행하는 Bean. + * {@link ScheduledServiceBean}이 작업을 시작한다. + * @author mjkhan + */ +public abstract class ScheduledBean extends ManagedComponent { + private boolean busy; + + /**현재 Bean이 작업 중인지 반환한다.
+ * {@link ScheduledServiceBean}이 사용한다. + * @return 작업 여부 + * + */ + public boolean isBusy() { + return busy; + } + + /**현재 Bean의 작업 여부를 설정한다.
+ * {@link ScheduledServiceBean}이 사용한다. + * @param busy 작업 여부 + * + */ + public void setBusy(boolean busy) { + this.busy = busy; + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/foundation/component/ScheduledServiceBean.java b/src/main/java/cokr/xit/foundation/component/ScheduledServiceBean.java new file mode 100644 index 0000000..c374df9 --- /dev/null +++ b/src/main/java/cokr/xit/foundation/component/ScheduledServiceBean.java @@ -0,0 +1,40 @@ +package cokr.xit.foundation.component; + +import java.util.function.Supplier; + +/**지정한 일정에 따라 작업을 수행하는 서비스 구현체가 상속받는 베이스 클래스. + * 일정은 quartz 라이브러리를 사용해 지정한다. + * @author mjkhan + */ +public class ScheduledServiceBean extends AbstractServiceBean { + /**주어진 작업을 수행한다. scheduled이 작업 중이면 무시한다. + * @param scheduled 작업 Bean + * @param task 작업 Bean의 메소드 + */ + protected void execute(ScheduledBean scheduled, Runnable task) { + if (scheduled.isBusy()) return; + + scheduled.setBusy(true); + try { + task.run(); + } finally { + scheduled.setBusy(false); + } + } + + /**주어진 작업을 수행하고 결과를 반환한다. scheduled이 작업 중이면 무시하고 null을 반환한다. + * @param scheduled 작업 Bean + * @param task 작업 Bean의 메소드 + * @return 작업 결과 + */ + protected T execute(ScheduledBean scheduled, Supplier task) { + if (scheduled.isBusy()) return null; + + scheduled.setBusy(true); + try { + return task.get(); + } finally { + scheduled.setBusy(false); + } + } +} \ No newline at end of file