Sonar Fix - ConnectionFactory.java
[dmaap/dbcapi.git] / src / main / java / org / onap / dmaap / dbcapi / database / ConnectionFactory.java
index aee3ff1..e32b8e0 100644 (file)
@@ -3,6 +3,7 @@
  * org.onap.dmaap
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2019 IBM.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,6 +27,7 @@ import java.util.*;
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 
+import java.util.concurrent.TimeUnit;
 import org.onap.dmaap.dbcapi.util.DmaapConfig;
 
 public class ConnectionFactory {
@@ -36,6 +38,7 @@ public class ConnectionFactory        {
         static final EELFLogger errorLogger = EELFManager.getInstance().getErrorLogger();
         static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
         static final EELFLogger serverLogger = EELFManager.getInstance().getServerLogger();
+        static final int PREPARE_PSQL_CONNECTION_ATTEMPTS = 5;
 
        static {
                try {
@@ -75,6 +78,14 @@ public class ConnectionFactory       {
                Properties p = new Properties();
                p.put("user", dbuser);
                p.put("password", dbcr);
+               for (int i=1; i<PREPARE_PSQL_CONNECTION_ATTEMPTS; i++){
+                       try{
+                               return(DriverManager.getConnection("jdbc:postgresql://" + host + "/" + dbname, p));
+                       }catch(SQLException e){
+                               logger.error("Unable to connect to the postgres server. " + i + "attempt failed. ", e);
+                               waitFor(1);
+                       }
+               }
                return(DriverManager.getConnection("jdbc:postgresql://" + host + "/" + dbname, p));
        }
        public String getSchema() {
@@ -93,4 +104,12 @@ public class ConnectionFactory      {
                        logger.error("Error", e);
                }
        }
+       private void waitFor(long seconds){
+               try {
+                       TimeUnit.SECONDS.sleep(seconds);
+               } catch (InterruptedException e) {
+                       logger.debug("Waiting interrupted. ", e);
+                       Thread.currentThread().interrupt();
+               }
+       }
 }