Package com.dotmarketing.quartz

Source Code of com.dotmarketing.quartz.DotJobStore

package com.dotmarketing.quartz;


import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import net.sourceforge.jtds.jdbc.ConnectionJDBC2;

import org.quartz.JobDetail;
import org.quartz.JobPersistenceException;
import org.quartz.ObjectAlreadyExistsException;
import org.quartz.SchedulerConfigException;
import org.quartz.Trigger;
import org.quartz.core.SchedulingContext;
import org.quartz.impl.jdbcjobstore.JobStoreCMT;
import org.quartz.impl.jdbcjobstore.UpdateLockRowSemaphore;
import org.quartz.spi.ClassLoadHelper;
import org.quartz.spi.SchedulerSignaler;
import org.quartz.utils.ConnectionProvider;
import org.quartz.utils.DBConnectionManager;
import org.springframework.jdbc.datasource.DataSourceUtils;

import com.dotmarketing.business.APILocator;
import com.dotmarketing.db.DbConnectionFactory;
import com.dotmarketing.util.Config;
import com.dotmarketing.util.Logger;
import com.dotmarketing.util.UtilMethods;

public class DotJobStore extends JobStoreCMT {
  @Override
  public void storeJobAndTrigger(SchedulingContext ctxt, JobDetail newJob, Trigger newTrigger) throws ObjectAlreadyExistsException, JobPersistenceException {
    super.storeJobAndTrigger(ctxt, newJob, newTrigger);
  }

  public static final String TX_DATA_SOURCE_PREFIX = "TxDataSource.";

  public static final String NON_TX_DATA_SOURCE_PREFIX = "NonTxDataSource.";

  private DataSource dataSource;

  public void initialize(ClassLoadHelper loadHelper, SchedulerSignaler signaler)
      throws SchedulerConfigException {

    this.dataSource = DbConnectionFactory.getDataSource();

    setDataSource(TX_DATA_SOURCE_PREFIX + getInstanceName());
    setDontSetAutoCommitFalse(true);

//    String serverName = Config.getStringProperty("DIST_INDEXATION_SERVER_ID");
    String serverName = APILocator.getServerAPI().readServerId();
    if(!UtilMethods.isSet(serverName)){
      serverName = "dotCMSServer";
    }
    setInstanceId(serverName);

    DBConnectionManager.getInstance().addConnectionProvider(
        TX_DATA_SOURCE_PREFIX + getInstanceName(),
        new ConnectionProvider() {
          public Connection getConnection() throws SQLException {
            return DataSourceUtils.doGetConnection(dataSource);
          }
          public void shutdown() {
            // Do nothing - a Spring-managed DataSource has its own lifecycle.
          }
        }
    );

    final DataSource nonTxDataSourceToUse = this.dataSource;

    setNonManagedTXDataSource(NON_TX_DATA_SOURCE_PREFIX + getInstanceName());

    DBConnectionManager.getInstance().addConnectionProvider(
        NON_TX_DATA_SOURCE_PREFIX + getInstanceName(),
        new ConnectionProvider() {
          public Connection getConnection() throws SQLException {
            Connection c = nonTxDataSourceToUse.getConnection();
            c.setTransactionIsolation(ConnectionJDBC2.TRANSACTION_READ_COMMITTED);
            return  c;
          }
          public void shutdown() {
            // Do nothing - a Spring-managed DataSource has its own lifecycle.
          }
        }
    );


    //This is done because http://jira.opensymphony.com/browse/QUARTZ-497
    UpdateLockRowSemaphore sem = new UpdateLockRowSemaphore();
    if (DbConnectionFactory.isMySql()) {
      tablePrefix = tablePrefix.toLowerCase();
    }else{
      sem.setUpdateLockRowSQL("UPDATE {0}LOCKS SET LOCK_NAME = LOCK_NAME WHERE LOCK_NAME = ?");
      sem.setTablePrefix(tablePrefix);
    }

    //http://jira.dotmarketing.net/browse/DOTCMS-6699
    String driverClass = Config.getStringProperty("QUARTZ_DRIVER_CLASS", "");
    if(UtilMethods.isSet(driverClass) && driverClass.trim().length()>1){
      try {
        setDriverDelegateClass(driverClass);
      } catch (Exception e) {
        Logger.info(this, e.getMessage());
      }
    }else if (DbConnectionFactory.isMySql()) {
      try {
        setDriverDelegateClass("com.dotmarketing.quartz.MySQLJDBCDelegate");
        MySQLLockSemaphore mySQLSem = new MySQLLockSemaphore(tablePrefix);
        setLockHandler(mySQLSem);
      } catch (Exception e) {
        Logger.info(this, e.getMessage());
      }
    } else if (DbConnectionFactory.isPostgres()) {
      try {
        setDriverDelegateClass("org.quartz.impl.jdbcjobstore.PostgreSQLDelegate");
      } catch (Exception e) {
        Logger.info(this, e.getMessage());
      }
    } else if (DbConnectionFactory.isMsSql()) {
      try {
        setDriverDelegateClass("org.quartz.impl.jdbcjobstore.DotMSSQLDelegate");
        setLockHandler(sem);
      } catch (Exception e) {
        Logger.info(this, e.getMessage());
      }
    } else if (DbConnectionFactory.isOracle()) {
      try {
        setDriverDelegateClass("org.quartz.impl.jdbcjobstore.oracle.OracleDelegate");
        setLockHandler(sem);
      } catch (Exception e) {
        Logger.info(this, e.getMessage());
      }
    } else if (DbConnectionFactory.isH2()) {
            try {
                setDriverDelegateClass("org.quartz.impl.jdbcjobstore.StdJDBCDelegate");
                setLockHandler(sem);
            } catch (Exception e) {
                Logger.info(this, e.getMessage());
            }
    }

    super.initialize(loadHelper, signaler);
  }

  protected void closeConnection(Connection con) {
    DataSourceUtils.releaseConnection(con, this.dataSource);
  }





}
TOP

Related Classes of com.dotmarketing.quartz.DotJobStore

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.