コード例 #1
0
ファイル: Virtuoso.java プロジェクト: linkedpipes/etl
 private Connection getSqlConnection() throws LpException {
   try {
     return DriverManager.getConnection(
         configuration.getVirtuosoUrl(), configuration.getUsername(), configuration.getPassword());
   } catch (SQLException ex) {
     throw exceptionFactory.failure("Can't create sql connection.", ex);
   }
 }
コード例 #2
0
ファイル: Virtuoso.java プロジェクト: linkedpipes/etl
  @Override
  public void execute() throws LpException {
    // Create remote repository.
    final VirtuosoRepository virtuosoRepository =
        new VirtuosoRepository(
            configuration.getVirtuosoUrl(),
            configuration.getUsername(),
            configuration.getPassword());
    try {
      virtuosoRepository.initialize();
    } catch (RepositoryException ex) {
      throw exceptionFactory.failure("Can't connect to Virtuoso repository.", ex);
    }
    cleanUp.addAction(
        () -> {
          try {
            virtuosoRepository.shutDown();
          } catch (RepositoryException ex) {
            LOG.warn("Can't close repository.", ex);
          }
        });
    // Delete data if set.
    if (configuration.isClearDestinationGraph()) {
      RepositoryConnection repositoryConnection = virtuosoRepository.getConnection();
      try {
        final Update update =
            repositoryConnection.prepareUpdate(
                QueryLanguage.SPARQL, getClearQuery(configuration.getTargetGraph()));
        update.execute();
      } finally {
        try {
          repositoryConnection.close();
        } catch (RepositoryException ex) {
          LOG.warn("Can't close connection.", ex);
        }
      }
    }
    final Connection connectionForInit = getSqlConnection();
    // Insert data to load table.
    try (PreparedStatement statementLdDir = connectionForInit.prepareStatement(SQL_LD_DIR)) {
      statementLdDir.setString(1, configuration.getLoadDirectoryPath());
      statementLdDir.setString(2, configuration.getLoadFileName());
      statementLdDir.setString(3, configuration.getTargetGraph());
      // Execute.
      final ResultSet resultSetLdDir = statementLdDir.executeQuery();
      resultSetLdDir.close();
    } catch (SQLException ex) {
      throw exceptionFactory.failure("Can't execute ld_dir query.", ex);
    }
    // Check number of files to load.
    final int filesToLoad;
    try (PreparedStatement statementStatusCountProcessing =
        connectionForInit.prepareStatement(SQL_QUERY_WAITING)) {
      statementStatusCountProcessing.setString(1, configuration.getLoadDirectoryPath() + "%");
      try (ResultSet resultSetProcessing = statementStatusCountProcessing.executeQuery()) {
        resultSetProcessing.next();
        filesToLoad = resultSetProcessing.getInt(1);
      }
    } catch (SQLException ex) {
      throw exceptionFactory.failure("Can't query load_list table.", ex);
    } finally {
      // Here we can close the connection.
      try {
        connectionForInit.close();
      } catch (SQLException ex) {
        LOG.warn("Can't close SQL connection.", ex);
      }
    }
    LOG.info("Load list holds {} files to process", filesToLoad);
    if (filesToLoad == 0) {
      LOG.info("Nothing to do. Stopping.");
      return;
    }
    // Start loading, we use only a single thread call here.
    startLoading();
    // Check for status - periodic and final.
    while (true) {
      final Connection connectionForStatusCheck = getSqlConnection();
      try (PreparedStatement statement =
          connectionForStatusCheck.prepareStatement(SQL_QUERY_FINISHED)) {
        statement.setString(1, configuration.getLoadDirectoryPath() + "%");
        try (ResultSet resultSetDoneLoop = statement.executeQuery()) {
          resultSetDoneLoop.next();
          int filesLoaded = resultSetDoneLoop.getInt(1);
          LOG.info("Processing {}/{} files", filesLoaded, filesToLoad);
          if (filesLoaded == filesToLoad) {
            break;
          }
        }
      } catch (SQLException ex) {
        LOG.warn("Can't query status.", ex);
      } finally {
        try {
          connectionForStatusCheck.close();
        } catch (SQLException ex) {
          LOG.warn("Can't close SQL connection.", ex);
        }
      }
      // Wait before next check.
      try {
        Thread.sleep(configuration.getStatusUpdateInterval() * 1000);
      } catch (InterruptedException ex) {
        // Do nothing here.
      }
    }
    if (configuration.isClearLoadList()) {
      final Connection connectionForDelete = getSqlConnection();
      // Delete from loading table - made optional.
      try (PreparedStatement delete = connectionForDelete.prepareStatement(SQL_DELETE_LOAD_LIST)) {
        delete.setString(1, configuration.getLoadDirectoryPath() + "%");
        delete.executeUpdate();
      } catch (SQLException ex) {

      } finally {
        try {
          connectionForDelete.close();
        } catch (SQLException ex) {
          LOG.warn("Can't close SQL connection.", ex);
        }
      }
    }
  }