All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.kawanfw.sql.servlet.injection.classes.AdvancedThreadPoolExecutorBuilder Maven / Gradle / Ivy

/*
 * Copyright (c)2022 KawanSoft S.A.S. All rights reserved.
 * 
 * Use of this software is governed by the Business Source License included
 * in the LICENSE.TXT file in the project's root directory.
 *
 * Change Date: 2026-11-01
 *
 * On the date above, in accordance with the Business Source License, use
 * of this software will be governed by version 2.0 of the Apache License.
 */
package org.kawanfw.sql.servlet.injection.classes;

import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.Properties;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import org.kawanfw.sql.api.server.DatabaseConfigurationException;
import org.kawanfw.sql.servlet.injection.properties.PropertiesFileStore;
import org.kawanfw.sql.servlet.injection.properties.PropertiesFileUtil;
import org.kawanfw.sql.tomcat.properties.threadpool.ThreadPoolExecutorBuilder;
import org.kawanfw.sql.tomcat.properties.threadpool.ThreadPoolProperties;
import org.kawanfw.sql.util.SqlTag;

public class AdvancedThreadPoolExecutorBuilder implements ThreadPoolExecutorBuilder {

    /**
     * Creates the ThreadPoolExecutor that will be used using properties
     * @throws IOException 
     * @throws DatabaseConfigurationException 
     * @throws SQLException 
     * @throws ClassNotFoundException
     * @throws SecurityException
     * @throws NoSuchMethodException
     * @throws InvocationTargetException
     * @throws IllegalArgumentException
     * @throws IllegalAccessException
     * @throws InstantiationException
     */
    public ThreadPoolExecutor build() throws DatabaseConfigurationException, IOException, SQLException {
		
	File propertiesFile = PropertiesFileStore.get();
	Properties properties = PropertiesFileUtil.getProperties(propertiesFile);

	//return ProEditionThreadPoolExecutorBuilderWrap.buildWrap(properties);
	
	ThreadPoolProperties threadPoolProperties = new ThreadPoolProperties(properties);

	int corePoolSize = threadPoolProperties.getCorePoolSize();
	int maximumPoolSize = threadPoolProperties.getMaximumPoolSize();
	TimeUnit unit = threadPoolProperties.getUnit();
	long keepAliveTime = threadPoolProperties.getKeepAliveTime();
	BlockingQueue workQueue = threadPoolProperties.getWorkQueue();
	boolean prestartAllCoreThreads = threadPoolProperties.isPrestartAllCoreThreads();

	ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime,
		unit, workQueue);
	if (prestartAllCoreThreads) {
	    threadPoolExecutor.prestartAllCoreThreads();
	}

	System.out.println(SqlTag.SQL_PRODUCT_START + " Loading ThreadPoolExecutor:");
	System.out.println(SqlTag.SQL_PRODUCT_START + "  -> [corePoolSize: " + threadPoolExecutor.getCorePoolSize()
		+ ", maximumPoolSize: " + threadPoolExecutor.getMaximumPoolSize() + ", unit: " + unit + ", ");
	System.out
		.println(SqlTag.SQL_PRODUCT_START + "  ->  keepAliveTime: " + threadPoolExecutor.getKeepAliveTime(unit)
			+ ", workQueue: " + threadPoolExecutor.getQueue().getClass().getSimpleName() + "("
			+ threadPoolExecutor.getQueue().remainingCapacity() + "), " + "prestartAllCoreThreads: "
			+ prestartAllCoreThreads + "]");
	
	return threadPoolExecutor;
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy