ConPool.java

package model.storage;

import org.apache.tomcat.jdbc.pool.PoolProperties;
import org.apache.tomcat.jdbc.pool.DataSource;

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

public final class ConPool {
   /***
    * Instanza di dataSource.
    */
   private DataSource datasource;
   /***
    * Instanza della classe ConPool.
    */
   private static ConPool instance;
   /***
    * Connessioni Max.
    */
   private static final int MAX_ACTIVE = 100;
   /***
    * Size del pool.
    */
   private static final int INITIAL_SIZE = 10;
   /***
    * Tempo minimo di idle.
    */
   private static final int MIN_IDLE = 10;
   /***
    * Timeout connessione.
    */
   private static final int TIMEOUT = 15;

   private ConPool() {
   }

   /***
    * Metodo che ritorna l'instanza di ConPool.
    * @return l'istanza della classe
    */
   public static ConPool getInstance() {
      if (instance == null) {
         instance = new ConPool();
      }

      return instance;
   }

   /**
    * Metodo per ottenere una connessione al database.
    *
    * @return Una Connection
    * @throws SQLException Eccezione se qualcosa va storto
    */
   public Connection getConnection() throws SQLException {
      if (datasource == null) {
         PoolProperties p = new PoolProperties();
         p.setUrl("jdbc:mysql://"
                 + "fundit-mysqlserver.mysql.database.azure.com:3306/"
                 + "funditdb?useSSL=true");
         p.setDriverClassName("com.mysql.cj.jdbc.Driver");
         p.setUsername("funditadmin");
         p.setPassword("cAEmiz5Dx3PZRQ");
         p.setMaxActive(MAX_ACTIVE);
         p.setInitialSize(INITIAL_SIZE);
         p.setMinIdle(MIN_IDLE);
         p.setRemoveAbandonedTimeout(TIMEOUT);
         p.setRemoveAbandoned(true);
         datasource = new DataSource();
         datasource.setPoolProperties(p);
      }

      return datasource.getConnection();
   }

   /***
    * Metodo per chiudere la dataSource.
    */
   public void closeDataSource() {
      if (datasource != null) {
         try {
            datasource.getConnection().close();
         } catch (SQLException e) {
            e.printStackTrace();
         }
         datasource.close();
      }
   }
}