docs: public final boolean initializeDatabase(
      final Map<String, Object> pAddParam) throws Exception {
      String queryExistanceTable = this.mngSettings.getAppSettings()
        .get("checkTableExist");
      boolean ifCreatedOrAdded = false;
      boolean ifAllTablesCreated = true;
      String dirPath;
      if (this.propertiesBase.getDirectory() != null) {
        dirPath = "/" + this.propertiesBase.getDirectory() + "/";
      } else {
        dirPath = "/";
      }
      String useSubFolder = this.mngSettings.getAppSettings().get("useSubFolder");
      try {
        for (Map.Entry<String, TableSql> entry : getTablesMap().entrySet()) {
          IRecordSet rs = srvDatabase.retrieveRecords(queryExistanceTable
            .replace(TABLE_PARAM_NAME_IN_EXISTENCE_QUERY,
              entry.getKey().toUpperCase()));
          if (!rs.moveToFirst()) { //cause problemable SQL identifier standard
            rs = srvDatabase.retrieveRecords(queryExistanceTable
              .replace(TABLE_PARAM_NAME_IN_EXISTENCE_QUERY,
                entry.getKey().toLowerCase()));
            if (!rs.moveToFirst()) {
              ifCreatedOrAdded = true;
              String ddlStatment = evalSqlCreateTable(entry.getKey());
              getLogger().info(null, ASrvOrm.class, "Try to execute DDL: "
                  + ddlStatment);
              srvDatabase.executeQuery(ddlStatment);
            } else {
              ifAllTablesCreated = false;
            }
          } else {
            ifAllTablesCreated = false;
          }
        }
      } finally {
        this.srvDatabase.releaseResources(); //close connection
      } //cause drop table requires new connection:
      if (!ifAllTablesCreated) {
        try { //the first should be drop commands
          tryUgradeDatabaseAnyWay(dirPath + useSubFolder + "/");
        } finally {
          this.srvDatabase.releaseResources(); //close connection
        }
      }
      try {
        String initSql = loadString(dirPath + useSubFolder + "/" + "init.sql");
        if (initSql != null) {
          getLogger().info(null, ASrvOrm.class,
            "init.sql found, try to execute.");
          for (String initSingle : initSql.split("\n")) {
            if (initSingle.trim().length() > 1 && !initSingle.startsWith("/")) {
              getLogger().info(null, ASrvOrm.class, "Try to execute INIT query: "
                  + initSingle);
              srvDatabase.executeQuery(initSingle);
            }
          }
        } else {
          getLogger().info(null, ASrvOrm.class, "init.sql not found.");
        }
        if (ifAllTablesCreated) {
          getLogger().info(null, ASrvOrm.class, "all tables has been created.");
          DatabaseInfo databaseInfo = new DatabaseInfo();
          int dbVer = Integer.parseInt(this.mngSettings
          .getAppSettings().get("databaseVersion"));
          databaseInfo.setDatabaseVersion(dbVer);
          databaseInfo.setDatabaseId(getNewDatabaseId());
          databaseInfo.setDescription(this.mngSettings
            .getAppSettings().get("title"));
          insertEntity(pAddParam, databaseInfo);
          String insertSql = loadString(dirPath + "insert.sql");
          if (insertSql != null) {
            getLogger().info(null, ASrvOrm.class, dirPath
              + "insert.sql found, try to execute.");
            for (String insertSingle : insertSql.split("\n")) {
              if (insertSingle.trim().length() > 1
                  && !insertSingle.startsWith("/")) {
                getLogger().info(null, ASrvOrm.class, "Try to execute insert : "
                    + insertSingle);
                srvDatabase.executeQuery(insertSingle);
              }
            }
          } else {
            getLogger().info(null, ASrvOrm.class,
              dirPath + "insert.sql not found.");
          }
        } else if (ifCreatedOrAdded) {
          getLogger().info(null, ASrvOrm.class, "new tables has been added.");
        } else {
          getLogger().info(null, ASrvOrm.class, "tables already created.");
        }
      } finally {
        this.srvDatabase.releaseResources(); //close connection
      }
      this.mngSettings.setClassesSettings(null);
      this.mngSettings.setFieldsSettings(null);
      return ifCreatedOrAdded;
    }