Advertisement
forextheblack

DatabaseManager

Apr 8th, 2015
20
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.49 KB | None | 0 0
  1. public class DatabaseManager {
  2.     private Properties mysqlProperties;
  3.     private List<DatabaseClient> databaseClientList;
  4.     private Thread poolThread;
  5.     private Boolean isAlive = true;
  6.    
  7.     public DatabaseManager(Properties mysqlProperties) {
  8.         this.mysqlProperties = mysqlProperties;
  9.         this.databaseClientList = new ArrayList<DatabaseClient>();
  10.     }
  11.    
  12.     public void start() {
  13.         this.startPool();
  14.         this.test();
  15.     }
  16.    
  17.     public void stop() {
  18.         try {
  19.             // Thread kill.
  20.             this.isAlive = false;
  21.             this.poolThread.join();
  22.             this.poolThread.interrupt();           
  23.            
  24.             // Dispose.
  25.             this.poolThread = null;
  26.             this.mysqlProperties = null;
  27.             this.databaseClientList = null;
  28.         } catch (Exception e) {
  29.             // TODO Auto-generated catch block
  30.             e.printStackTrace();
  31.         }
  32.     }
  33.    
  34.     private void startPool() {
  35.         this.poolThread = new Thread(() -> {
  36.             while(this.isAlive) {
  37.                 try {
  38.                     int count = 0;
  39.                    
  40.                     if(this.databaseClientList.size() > 0) {
  41.                         Iterator<DatabaseClient> databaseIterator = this.databaseClientList.iterator();
  42.                    
  43.                         // Killer
  44.                         if(this.databaseClientList.size() > 0) {
  45.                             while(databaseIterator.hasNext()) {
  46.                                 DatabaseClient client = (DatabaseClient)databaseIterator.next();
  47.                                 if((System.currentTimeMillis() - client.getLastUsed()) > Integer.parseInt(this.mysqlProperties.getProperty("maxDelayTime")) && !client.isUsed()) {
  48.                                     client.dispose();
  49.                                     databaseIterator.remove();
  50.                                     count++;
  51.                                 }
  52.                             }
  53.                         }  
  54.                         if(count > 0)
  55.                             System.out.println("-> Removed ".concat(String.valueOf(count)).concat(" connection/s"));
  56.                     }
  57.                    
  58.                     // Sleep
  59.                     Thread.sleep(Integer.parseInt(this.mysqlProperties.getProperty("sleepTime")));
  60.                 } catch (InterruptedException e) {
  61.                     // TODO Auto-generated catch block
  62.                     // e.printStackTrace();
  63.                 } catch (Exception e) {
  64.                     e.printStackTrace();
  65.                 }
  66.             }
  67.         });
  68.         this.poolThread.setName("DatabasePool - Nexus");
  69.         this.poolThread.setPriority(Thread.NORM_PRIORITY);
  70.         this.poolThread.start();
  71.     }
  72.    
  73.     public void test() {
  74.         DatabaseClient testClient = this.generateConnection();
  75.         testClient.finish();
  76.     }
  77.    
  78.     public DatabaseClient generateConnection() {
  79.         DatabaseClient databaseClient = null;
  80.         try {
  81.             // Is maxPool size.
  82.             while(this.databaseClientList.size() > Integer.parseInt(this.mysqlProperties.getProperty("maxPoolSize"))) {
  83.                 System.err.println("MAX POOL SIZE... WAITING FOR A KILL. AUGMENT MYSQL POOL SIZE!");
  84.                 Thread.sleep(1000); // STOP ALL... LAG...
  85.             }
  86.            
  87.             // Are a connection not used?
  88.             if(this.databaseClientList.size() > 0) {
  89.                 Iterator<DatabaseClient> databaseIterator = this.databaseClientList.iterator();
  90.                 while(databaseIterator.hasNext()) {
  91.                     DatabaseClient client = databaseIterator.next();
  92.                     if((System.currentTimeMillis() - client.getLastUsed()) > (Integer.parseInt(this.mysqlProperties.getProperty("maxDelayTime")) - 1000) && !client.isUsed()) {
  93.                         client.restart();
  94.                         return client;
  95.                     }
  96.                 }
  97.             }
  98.            
  99.             // Create connection.
  100.             Connection temporalConnection = DriverManager.getConnection(this.mysqlProperties.getProperty("url"), this.mysqlProperties.getProperty("user"), this.mysqlProperties.getProperty("pass"));
  101.             databaseClient = new DatabaseClient(temporalConnection);       
  102.            
  103.             // Save connection.
  104.             this.databaseClientList.add(databaseClient);
  105.         } catch (Exception e) {
  106.             // TODO Auto-generated catch block
  107.             e.printStackTrace();
  108.             databaseClient = null;
  109.         }
  110.         return databaseClient;
  111.     }
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement