Update for OOM integration
[dmaap/datarouter.git] / datarouter-prov / src / main / java / org / onap / dmaap / datarouter / provisioning / utils / DB.java
index c65ee26..a907a03 100644 (file)
@@ -37,11 +37,10 @@ import java.util.*;
  * @version $Id$\r
  */\r
 public class DB {\r
+\r
     /**\r
      * The name of the properties file (in CLASSPATH)\r
      */\r
-    private static final String CONFIG_FILE = "provserver.properties";\r
-\r
     private static String DB_URL;\r
     private static String DB_LOGIN;\r
     private static String DB_PASSWORD;\r
@@ -53,15 +52,17 @@ public class DB {
     public static String HTTP_PORT;\r
 \r
     /**\r
-     * Construct a DB object.  If this is the very first creation of this object, it will load a copy\r
-     * of the properties for the server, and attempt to load the JDBC driver for the database.  If a fatal\r
-     * error occurs (e.g. either the properties file or the DB driver is missing), the JVM will exit.\r
+     * Construct a DB object.  If this is the very first creation of this object, it will load a copy of the properties\r
+     * for the server, and attempt to load the JDBC driver for the database.  If a fatal error occurs (e.g. either the\r
+     * properties file or the DB driver is missing), the JVM will exit.\r
      */\r
     public DB() {\r
         if (props == null) {\r
             props = new Properties();\r
-            try (InputStream inStream = getClass().getClassLoader().getResourceAsStream(CONFIG_FILE)) {\r
-                props.load(inStream);\r
+            try {\r
+                props.load(new FileInputStream(System.getProperty(\r
+                    "org.onap.dmaap.datarouter.provserver.properties",\r
+                    "/opt/app/datartr/etc/provserver.properties")));\r
                 String DB_DRIVER = (String) props.get("org.onap.dmaap.datarouter.db.driver");\r
                 DB_URL = (String) props.get("org.onap.dmaap.datarouter.db.url");\r
                 DB_LOGIN = (String) props.get("org.onap.dmaap.datarouter.db.login");\r
@@ -94,7 +95,6 @@ public class DB {
      * Get a JDBC connection to the DB from the pool.  Creates a new one if none are available.\r
      *\r
      * @return the Connection\r
-     * @throws SQLException\r
      */\r
     @SuppressWarnings("resource")\r
     public Connection getConnection() throws SQLException {\r
@@ -110,8 +110,9 @@ public class DB {
                         try {\r
                             connection = DriverManager.getConnection(DB_URL, DB_LOGIN, DB_PASSWORD);\r
                         } catch (SQLException sqlEx) {\r
-                            if (++n >= 3)\r
+                            if (++n >= 3) {\r
                                 throw sqlEx;\r
+                            }\r
                         }\r
                     } while (connection == null);\r
                 }\r
@@ -132,15 +133,16 @@ public class DB {
     public void release(Connection connection) {\r
         if (connection != null) {\r
             synchronized (queue) {\r
-                if (!queue.contains(connection))\r
+                if (!queue.contains(connection)) {\r
                     queue.add(connection);\r
+                }\r
             }\r
         }\r
     }\r
 \r
     /**\r
-     * Run all necessary retrofits required to bring the database up to the level required for this version\r
-     * of the provisioning server.  This should be run before the server itself is started.\r
+     * Run all necessary retrofits required to bring the database up to the level required for this version of the\r
+     * provisioning server.  This should be run before the server itself is started.\r
      *\r
      * @return true if all retrofits worked, false otherwise\r
      */\r
@@ -149,16 +151,15 @@ public class DB {
     }\r
 \r
     /**\r
-     * Retrofit 1 - Make sure the expected tables are in DB and are initialized.\r
-     * Uses sql_init_01.sql to setup the DB.\r
+     * Retrofit 1 - Make sure the expected tables are in DB and are initialized. Uses sql_init_01.sql to setup the DB.\r
      *\r
      * @return true if the retrofit worked, false otherwise\r
      */\r
     private boolean retroFit1() {\r
         final String[] expectedTables = {\r
-                "FEEDS", "FEED_ENDPOINT_ADDRS", "FEED_ENDPOINT_IDS", "PARAMETERS",\r
-                "SUBSCRIPTIONS", "LOG_RECORDS", "INGRESS_ROUTES", "EGRESS_ROUTES",\r
-                "NETWORK_ROUTES", "NODESETS", "NODES", "GROUPS"\r
+            "FEEDS", "FEED_ENDPOINT_ADDRS", "FEED_ENDPOINT_IDS", "PARAMETERS",\r
+            "SUBSCRIPTIONS", "LOG_RECORDS", "INGRESS_ROUTES", "EGRESS_ROUTES",\r
+            "NETWORK_ROUTES", "NODESETS", "NODES", "GROUPS"\r
         };\r
         Connection connection = null;\r
         try {\r
@@ -166,7 +167,7 @@ public class DB {
             Set<String> actualTables = getTableSet(connection);\r
             boolean initialize = false;\r
             for (String table : expectedTables) {\r
-                initialize |= !actualTables.contains(table);\r
+                initialize |= !actualTables.contains(table.toLowerCase());\r
             }\r
             if (initialize) {\r
                 intlogger.info("PROV9001: First time startup; The database is being initialized.");\r
@@ -176,8 +177,9 @@ public class DB {
             intlogger.fatal("PROV9000: The database credentials are not working: " + e.getMessage());\r
             return false;\r
         } finally {\r
-            if (connection != null)\r
+            if (connection != null) {\r
                 release(connection);\r
+            }\r
         }\r
         return true;\r
     }\r
@@ -192,7 +194,7 @@ public class DB {
         Set<String> tables = new HashSet<String>();\r
         try {\r
             DatabaseMetaData md = connection.getMetaData();\r
-            ResultSet rs = md.getTables("datarouter", "", "", null);\r
+            ResultSet rs = md.getTables(null, null, "%", null);\r
             if (rs != null) {\r
                 while (rs.next()) {\r
                     tables.add(rs.getString("TABLE_NAME"));\r
@@ -200,44 +202,45 @@ public class DB {
                 rs.close();\r
             }\r
         } catch (SQLException e) {\r
+            intlogger.fatal("PROV9010: Failed to get TABLE data from DB: " + e.getMessage());\r
         }\r
         return tables;\r
     }\r
 \r
     /**\r
-     * Initialize the tables by running the initialization scripts located in the directory specified\r
-     * by the property <i>org.onap.dmaap.datarouter.provserver.dbscripts</i>.  Scripts have names of\r
-     * the form sql_init_NN.sql\r
+     * Initialize the tables by running the initialization scripts located in the directory specified by the property\r
+     * <i>org.onap.dmaap.datarouter.provserver.dbscripts</i>.  Scripts have names of the form sql_init_NN.sql\r
      *\r
      * @param connection a DB connection\r
-     * @param scriptId   the number of the sql_init_NN.sql script to run\r
+     * @param scriptId the number of the sql_init_NN.sql script to run\r
      */\r
     private void runInitScript(Connection connection, int scriptId) {\r
         String scriptDir = (String) props.get("org.onap.dmaap.datarouter.provserver.dbscripts");\r
-        StringBuilder sb = new StringBuilder();\r
+        StringBuilder strBuilder = new StringBuilder();\r
         try {\r
             String scriptFile = String.format("%s/sql_init_%02d.sql", scriptDir, scriptId);\r
-            if (!(new File(scriptFile)).exists())\r
-                return;\r
-\r
-            LineNumberReader in = new LineNumberReader(new FileReader(scriptFile));\r
+            if (!(new File(scriptFile)).exists()) {\r
+                intlogger.fatal("PROV9005 Failed to load sql script from : " + scriptFile);\r
+                System.exit(1);\r
+            }\r
+            LineNumberReader lineReader = new LineNumberReader(new FileReader(scriptFile));\r
             String line;\r
-            while ((line = in.readLine()) != null) {\r
+            while ((line = lineReader.readLine()) != null) {\r
                 if (!line.startsWith("--")) {\r
                     line = line.trim();\r
-                    sb.append(line);\r
+                    strBuilder.append(line);\r
                     if (line.endsWith(";")) {\r
                         // Execute one DDL statement\r
-                        String sql = sb.toString();\r
-                        sb.setLength(0);\r
-                        Statement s = connection.createStatement();\r
-                        s.execute(sql);\r
-                        s.close();\r
+                        String sql = strBuilder.toString();\r
+                        strBuilder.setLength(0);\r
+                        Statement statement = connection.createStatement();\r
+                        statement.execute(sql);\r
+                        statement.close();\r
                     }\r
                 }\r
             }\r
-            in.close();\r
-            sb.setLength(0);\r
+            lineReader.close();\r
+            strBuilder.setLength(0);\r
         } catch (Exception e) {\r
             intlogger.fatal("PROV9002 Error when initializing table: " + e.getMessage());\r
             System.exit(1);\r