code: public void initialize() throws StorageException {
          checkState(!initialized, "store already initialized");
  
          try {
              dbi.withHandle(new HandleCallback<Void>() {
                  @Override
                  public Void withHandle(Handle handle) throws Exception {
                      SnapshotsDAO dao = handle.attach(SnapshotsDAO.class);
                      dao.createSnapshotsTableWithIndex();
                      return null;
                  }
              });
  
              initialized = true;
          } catch (CallbackFailedException e) {
              throw new StorageException("fail create snapshots table", e.getCause());
          } catch (Exception e) {
              throw new StorageException("fail create snapshots table", e);
          }
      }
docs: Initialize this component.
  <p/>
  This method must be called before any other methods in this component.
  Once successful, subsequent calls to this method will throw an {@link IllegalStateException}.
  <p/>
  This method is <strong>not</strong> thread-safe. It cannot be
  called simultaneously by multiple threads. Doing so will result
  in undefined behavior.
  
  @throws StorageException if this component cannot be initialized. If this exception is thrown this component
  is in a <strong>undefined</strong> state and cannot be used safely.