Package de.scoopgmbh.copper.util

Source Code of de.scoopgmbh.copper.util.PersistentEngineFactory

/*
* Copyright 2002-2013 SCOOP Software GmbH
*
* 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 de.scoopgmbh.copper.util;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.sql.DataSource;

import de.scoopgmbh.copper.DependencyInjector;
import de.scoopgmbh.copper.EngineIdProvider;
import de.scoopgmbh.copper.EngineIdProviderBean;
import de.scoopgmbh.copper.PersistentProcessingEngine;
import de.scoopgmbh.copper.batcher.RetryingTxnBatchRunner;
import de.scoopgmbh.copper.batcher.impl.BatcherImpl;
import de.scoopgmbh.copper.common.DefaultProcessorPoolManager;
import de.scoopgmbh.copper.common.JdkRandomUUIDFactory;
import de.scoopgmbh.copper.common.WorkflowRepository;
import de.scoopgmbh.copper.persistent.DatabaseDialect;
import de.scoopgmbh.copper.persistent.DerbyDbDialect;
import de.scoopgmbh.copper.persistent.OracleDialect;
import de.scoopgmbh.copper.persistent.PersistentPriorityProcessorPool;
import de.scoopgmbh.copper.persistent.PersistentProcessorPool;
import de.scoopgmbh.copper.persistent.PersistentScottyEngine;
import de.scoopgmbh.copper.persistent.ScottyDBStorage;
import de.scoopgmbh.copper.persistent.txn.CopperTransactionController;
import de.scoopgmbh.copper.wfrepo.FileBasedWorkflowRepository;

public class PersistentEngineFactory {

  private DatabaseDialect createDialect(DataSource ds, WorkflowRepository wfRepository, EngineIdProvider engineIdProvider) throws SQLException {
    Connection c = ds.getConnection();
    try {
      String name = c.getMetaData().getDatabaseProductName();
      if ("oracle".equalsIgnoreCase(name)) {
        OracleDialect dialect = new OracleDialect();
        dialect.setWfRepository(wfRepository);
        dialect.setEngineIdProvider(engineIdProvider);
        dialect.setMultiEngineMode(false);
        return dialect;
      }
      if ("Apache Derby".equalsIgnoreCase(name)) {
        DerbyDbDialect dialect = new DerbyDbDialect();
        dialect.setDataSource(ds);
        dialect.setWfRepository(wfRepository);
        return dialect;
      }
      throw new Error("No dialect available for DBMS "+name);
    }
    finally {
      c.close();
    }
  }

  public PersistentProcessingEngine createEngine(DataSource dataSource, String wfRepoSourceDir, String wfRepoTargetDir, DependencyInjector dependencyInjector) throws Exception {
    EngineIdProvider engineIdProvider = new EngineIdProviderBean("default");
    FileBasedWorkflowRepository wfRepository = new FileBasedWorkflowRepository();
    wfRepository.setSourceDirs(Collections.singletonList(wfRepoSourceDir));
    wfRepository.setTargetDir(wfRepoTargetDir);
    wfRepository.start();

    CopperTransactionController txnController = new CopperTransactionController();
    txnController.setDataSource(dataSource);

    DatabaseDialect dialect = createDialect(dataSource, wfRepository, engineIdProvider);
    dialect.startup();

    @SuppressWarnings("rawtypes")
    RetryingTxnBatchRunner batchRunner = new RetryingTxnBatchRunner();
    batchRunner.setDataSource(dataSource);
    BatcherImpl batcher = new BatcherImpl(4);
    batcher.setBatchRunner(batchRunner);
    batcher.startup();

    ScottyDBStorage dbStorage = new ScottyDBStorage();
    dbStorage.setDialect(dialect);
    dbStorage.setTransactionController(txnController);
    dbStorage.setBatcher(batcher);

    PersistentPriorityProcessorPool ppool = new PersistentPriorityProcessorPool(PersistentProcessorPool.DEFAULT_POOL_ID, txnController);
    List<PersistentProcessorPool> pools = new ArrayList<PersistentProcessorPool>();
    pools.add(ppool);
    DefaultProcessorPoolManager<PersistentProcessorPool> processorPoolManager = new DefaultProcessorPoolManager<PersistentProcessorPool>();
    processorPoolManager.setProcessorPools(pools);

    PersistentScottyEngine engine = new PersistentScottyEngine();
    engine.setDbStorage(dbStorage);
    engine.setWfRepository(wfRepository);
    engine.setEngineIdProvider(engineIdProvider);
    engine.setIdFactory(new JdkRandomUUIDFactory());
    engine.setProcessorPoolManager(processorPoolManager);
    engine.setDependencyInjector(dependencyInjector);

    return engine;
  }
 
}
TOP

Related Classes of de.scoopgmbh.copper.util.PersistentEngineFactory

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.