or JobStoreCMT). Features include load-balancing and job fail-over (if the JobDetail's "request recovery" flag is set to true). It is important to note that
- When using clustering on separate machines, make sure that their clocks are synchronized using some form of time-sync service (clocks must be within a second of each other). See http://www.boulder.nist.gov/timefreq/service/its.htm.
- Never fire-up a non-clustered instance against the same set of tables that any other instance is running against.
- Each instance in the cluster should use the same copy of the quartz.properties file.
- Copy the source code from the example from the quartz example and add the follwing line to the QuartzTest.java class
jobDetail.setRequestsRecovery(true);
before adding jobDetail to the trigger. This is job failover. - You have to add the following to the quartz.properties file:
org.quartz.jobStore.isClustered = true org.quartz.jobStore.clusterCheckinInterval = 20000
This sets up quartz for clustering - Each server must have the same copy of the configuration file.
org.quartz.scheduler.instanceId = AUTO
To auto-generate instance ids.
- Create the data tables by using the sql scripts provided with the quartz download. The scripts are in the quartz\docs\dbTables directory.
#============================================================================ # Configure Main Scheduler Properties #============================================================================ org.quartz.scheduler.instanceName = MyClusteredScheduler org.quartz.scheduler.instanceId = AUTO #============================================================================ # Configure ThreadPool #============================================================================ org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 25 org.quartz.threadPool.threadPriority = 5 #============================================================================ # Configure JobStore #============================================================================ org.quartz.jobStore.misfireThreshold = 60000 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate org.quartz.jobStore.useProperties = false org.quartz.jobStore.dataSource = myDS org.quartz.jobStore.tablePrefix = QRTZ_ org.quartz.jobStore.isClustered = true org.quartz.jobStore.clusterCheckinInterval = 20000 #============================================================================ # Configure Datasources #============================================================================ org.quartz.dataSource.myDS.driver = oracle.jdbc.driver.OracleDriver org.quartz.dataSource.myDS.URL = jdbc:oracle:thin:@localhost:1521:orcl org.quartz.dataSource.myDS.user = scott org.quartz.dataSource.myDS.password = tiger org.quartz.dataSource.myDS.maxConnections = 5 org.quartz.dataSource.myDS.validationQuery=select 0 from dualIn order to use the datasources from your application server, change the datasource definition to the following
org.quartz.dataSource.myDS.jndiURL=jdbc/myDataSource org.quartz.dataSource.myDS.java.naming.factory.initial=com.evermind.server.rmi.RMIInitialContextFactory org.quartz.dataSource.myDS.java.naming.provider.url=ormi://localhost org.quartz.dataSource.myDS.java.naming.security.principal=admin org.quartz.dataSource.myDS.java.naming.security.credentials=123
{ 0 comments... Views All / Send Comment! }
Post a Comment