code: public synchronized final void initialize() throws StorageException {
          checkState(!initialized);
  
          try {
              setupConnection();
              Statement statement = connection.createStatement();
              checkNotNull(statement);
              try {
                  try {
                      addDatabaseCreateStatementsToBatch(statement);
                      statement.executeBatch();
                  } finally {
                      closeSilently(statement);
                  }
                  connection.commit();
                  initialized = true;
              } finally {
                  if (!initialized) {
                      connection.rollback();
                  }
              }
          } catch (Exception e) {
              throw new StorageException(e);
          } finally {
              if (!initialized) {
                  cleanupConnection();
              }
          }
      }
docs: Initialize the database backend.
  <p/>
  This method creates any tables and/or indexes needed to
  persist data to the database. Table and index-creation happen
  <strong>only once</strong>. Subsequent calls to this method do not
  modify or delete existing data. An instance of {@link Connection}
  is also created.
  <p/>
  This method <strong>does not</strong> validate any data already stored in database tables.
  
  @throws StorageException if the database backend cannot be accessed or initialized. The component
  is in an inconsistent state and <strong>should not</strong> be used if this
  exception is thrown
  @throws IllegalStateException if this method is called multiple times