작업환경
1. sts-3.1.0.RELEASE
2. jdk1.6.0_39
3. spring-2.5.6
4. quartz-1.8.6
서론
Quartz는 JMX를 제공하여 사용할 수 있다.
java 실행 시 VM arguments로
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
위 3개의 값을 셋팅만 해주고
quartz.propertis 파일에
org.quartz.scheduler.jmx.export = true
org.quartz.scheduler.jmx.objectName = quartz:type=QuartzScheduler,name=DefaultQuartzScheduler
위 2개의 값을 셋팅 해주면
사용가능하다.
확인은 jconsole로 확인이 가능하다.
Remote Process 체크하여 localhst:9999를 입력하여 Connect 버튼으로 접속한다.
그럼 접속이 되는데 탭 중 MBeans 탭을 클릭하면 아래와 같이 나온다.
Attributes는 변수들이고
Operations은 메소드들이고
Notifications는 어떤한 행위(이벤트)가 일어났을 때 알림 역할을 해준다.
Quartz Scheduler는 오픈소스지만 Quartz Manager는 시험판 30일에 유료이다.
Quartz Manager는 Quartz Scheduler의 JobDetail과 Trigger를 모니터링 및 컨트롤이 가능하게 해준다.
jconsole MBeans 탭에서
Operations을 클릭하면 아래와 같이 사용 가능한 메소드들이 나온다.
위 메소드들은 quartz-x.x.x.jar 안에 QuartzSchedulerMBeanImpl 클래스에 있는 메소드들이다.
매개변수가 없는(shutdown, start, standby) 함수들은 호출만 해서 사용 가능한데, 나머지 메소드들은 매개변수를 받는다.
이 매개변수 값들은 Quartz API를 확인하여 설정해줘야 하는데 익히기가 쉽지 않을 것이다.
(Java 내부 javax.management.openmbean 패키지에 있는 CompositeType, CompositeData 클래스에 Quartz가 필요한 데이터를 셋팅해서 Quartz JMX를 통해 넘겨줘야 한다.)
본론
JMX를 통해서 JobDetail이나 Trigger를 추가해야 한다면 사용자가 따로 만들어서 JMX에 등록하는게 편리할 수도 있다.
여기선 사용자가 따로 만들어 JMX에 등록하는 방법을 소개하고자 한다.
3가지 단계로 작업을 하면 된다.
1. MBean으로 사용할 클래스를 만든다.
package test.quartz.vo;
import org.quartz.JobDetail;
import org.quartz.SchedulerException;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdScheduler;
import test.quartz.job.OneJob;
public class RemoteMBean {
private StdScheduler scheduler;
public void setScheduler(StdScheduler scheduler) {
this.scheduler = scheduler;
}
public boolean resumeStat() throws SchedulerException {
JobDetail jobDetail = new JobDetail("job1", "group1", OneJob.class);
SimpleTrigger trigger = new SimpleTrigger("trigger1", "group1", 0, 1);
this.scheduler.scheduleJob(jobDetail, trigger);
return true;
}
}
2. Spring applicationContext.xml 파일에 MBean으로 사용할 클래스를 등록한다.
<bean id="remoteMBean" class="test.quartz.vo.RemoteMBean">
<property name="scheduler" ref="schedulerFactoryBean" />
</bean>
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
<property name="beans">
<map>
<entry key="quartz:name=remoteMBean" value-ref="remoteMBean" />
</map>
</property>
</bean>
3. Quartz를 실행시키고, jconsole로 Remote Process 접속하여 테스트 해본다.
package test.quartz;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import test.quartz.util.InitializeContext;
public class QuartzStart {
public static void main(String[] args) throws Exception {
new ClassPathXmlApplicationContext("applicationContext.xml");
MBeanServerConnection conn = (MBeanServerConnection) InitializeContext.getBean("clientConnector");
ObjectName name = new ObjectName("quartz:name=remoteMBean");
try {
Object obj = conn.invoke(name, "resumeStat", null, null);
System.out.println(obj);
} catch (Exception e) {
e.printStackTrace();
}
}
}
끝.
'Spring' 카테고리의 다른 글
Spring WebSocket (3) | 2015.09.13 |
---|---|
RestTemplate 사용법 (0) | 2015.02.20 |
spring 2.5.x 컨트롤러 설명 (0) | 2012.05.31 |
Spring-2.5.6 MVC (0) | 2011.10.22 |
Spring-3.0.6 + Sitemesh-2.4.2 + myBatis-3.0.6 + urlrewrite-3.2.0 (0) | 2011.09.10 |
댓글