/* * All content copyright Terracotta, Inc., unless otherwise indicated. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. * */ package org.terracotta.quartz.tests; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory; import org.terracotta.quartz.AbstractTerracottaJobStore; import org.terracotta.quartz.TerracottaJobStore; import org.terracotta.tests.base.AbstractClientBase; import org.terracotta.toolkit.Toolkit; import org.terracotta.toolkit.ToolkitFactory; import org.terracotta.toolkit.ToolkitInstantiationException; import java.io.IOException; import java.util.Properties; public abstract class ClientBase extends AbstractClientBase { private final Properties props = new Properties(); private Toolkit toolkit; public ClientBase(String args[]) { super(args); } @Override public void doTest() throws Throwable { Scheduler scheduler = null; try { scheduler = setupScheduler(); test(scheduler); } finally { if (scheduler != null && !scheduler.isShutdown()) { scheduler.shutdown(); } } } public void addSchedulerProperties(Properties properties) { // to be overridden } public Properties getSchedulerProps() { return props; } public Properties getToolkitProps() { return new Properties(); } protected Scheduler setupScheduler() throws IOException, SchedulerException { props.load(getClass().getResourceAsStream("/org/quartz/quartz.properties")); props.setProperty(StdSchedulerFactory.PROP_JOB_STORE_CLASS, TerracottaJobStore.class.getName()); props.setProperty(AbstractTerracottaJobStore.TC_CONFIGURL_PROP, getTerracottaUrl()); props.setProperty("org.quartz.jobStore.synchronousWrite", String.valueOf(isSynchWrite())); props.setProperty("org.quartz.jobStore.estimatedTimeToReleaseAndAcquireTrigger", "10"); props.setProperty(StdSchedulerFactory.PROP_SCHED_INSTANCE_ID, StdSchedulerFactory.AUTO_GENERATE_INSTANCE_ID); addSchedulerProperties(props); System.out.println(props); SchedulerFactory schedFact = new StdSchedulerFactory(props); Scheduler sched = schedFact.getScheduler(); if (isStartingScheduler()) { sched.start(); } return sched; } protected boolean isStartingScheduler() { return true; } protected boolean isSynchWrite() { return false; } protected abstract void test(Scheduler scheduler) throws Throwable; protected synchronized Toolkit getClusteringToolkit() { if (toolkit == null) { toolkit = createToolkit(); } return toolkit; } private Toolkit createToolkit() { try { return ToolkitFactory.createToolkit("toolkit:terracotta://" + getTerracottaUrl(), getToolkitProps()); } catch (ToolkitInstantiationException e) { throw new RuntimeException(e); } } }