예제 #1
0
  @Test
  public void testClose() throws IOException, ClassNotFoundException, SQLException {
    // connection part
    TJDBCConnectionDefinition connectionDefinition = new TJDBCConnectionDefinition();
    TJDBCConnectionProperties connectionProperties =
        DBTestUtils.createCommonJDBCConnectionProperties(allSetting, connectionDefinition);

    JDBCSourceOrSink sourceOrSink = new JDBCSourceOrSink();
    sourceOrSink.initialize(null, connectionProperties);

    ValidationResult result = sourceOrSink.validate(container);
    assertTrue(result.getStatus() == ValidationResult.Result.OK);

    // commit part
    TJDBCCommitDefinition commitDefinition = new TJDBCCommitDefinition();
    TJDBCCommitProperties commitProperties =
        (TJDBCCommitProperties) commitDefinition.createRuntimeProperties();

    commitProperties.referencedComponent.componentInstanceId.setValue(refComponentId);
    commitProperties.closeConnection.setValue(true);

    JDBCCommitSourceOrSink commitSourceOrSink = new JDBCCommitSourceOrSink();
    commitSourceOrSink.initialize(container, commitProperties);
    commitSourceOrSink.validate(container);

    try (java.sql.Connection refConnection =
        (java.sql.Connection)
            container.getComponentData(refComponentId, ComponentConstants.CONNECTION_KEY)) {
      assertTrue(refConnection != null);
      Assert.assertTrue(refConnection.isClosed());
    }
  }
예제 #2
0
  @SuppressWarnings("rawtypes")
  @Test
  public void testCommit() throws IOException, ClassNotFoundException, SQLException {
    // connection part
    TJDBCConnectionDefinition connectionDefinition = new TJDBCConnectionDefinition();
    TJDBCConnectionProperties connectionProperties =
        DBTestUtils.createCommonJDBCConnectionProperties(allSetting, connectionDefinition);

    JDBCSourceOrSink sourceOrSink = new JDBCSourceOrSink();
    sourceOrSink.initialize(null, connectionProperties);

    ValidationResult result = sourceOrSink.validate(container);
    assertTrue(result.getStatus() == ValidationResult.Result.OK);

    // output part
    TJDBCOutputDefinition outputDefinition = new TJDBCOutputDefinition();
    TJDBCOutputProperties outputProperties =
        (TJDBCOutputProperties) outputDefinition.createRuntimeProperties();

    outputProperties.main.schema.setValue(DBTestUtils.createTestSchema());
    outputProperties.updateOutputSchemas();

    outputProperties.tableSelection.tablename.setValue(DBTestUtils.getTablename());

    outputProperties.dataAction.setValue(DataAction.INSERT);

    outputProperties.referencedComponent.componentInstanceId.setValue(refComponentId);

    JDBCSink sink = new JDBCSink();
    sink.initialize(container, outputProperties);

    WriteOperation writerOperation = sink.createWriteOperation();
    writerOperation.initialize(container);
    JDBCOutputInsertWriter writer =
        (JDBCOutputInsertWriter) writerOperation.createWriter(container);

    try {
      writer.open("wid");

      IndexedRecord r1 = new GenericData.Record(outputProperties.main.schema.getValue());
      r1.put(0, 4);
      r1.put(1, "xiaoming");
      writer.write(r1);

      DBTestUtils.assertSuccessRecord(writer, r1);

      IndexedRecord r2 = new GenericData.Record(outputProperties.main.schema.getValue());
      r2.put(0, 5);
      r2.put(1, "xiaobai");
      writer.write(r2);

      DBTestUtils.assertSuccessRecord(writer, r2);

      writer.close();
    } finally {
      writer.close();
    }

    // commit part
    TJDBCCommitDefinition commitDefinition = new TJDBCCommitDefinition();
    TJDBCCommitProperties commitProperties =
        (TJDBCCommitProperties) commitDefinition.createRuntimeProperties();

    commitProperties.referencedComponent.componentInstanceId.setValue(refComponentId);
    commitProperties.closeConnection.setValue(false);

    JDBCCommitSourceOrSink commitSourceOrSink = new JDBCCommitSourceOrSink();
    commitSourceOrSink.initialize(container, commitProperties);
    commitSourceOrSink.validate(container);

    int count = -1;

    // create another session and check if the data is inserted
    try (Connection conn = JdbcRuntimeUtils.createConnection(allSetting);
        Statement statement = conn.createStatement();
        ResultSet resultset = statement.executeQuery("select count(*) from TEST")) {
      if (resultset.next()) {
        count = resultset.getInt(1);
      }
    }

    Assert.assertEquals(5, count);

    try (java.sql.Connection refConnection =
        (java.sql.Connection)
            container.getComponentData(refComponentId, ComponentConstants.CONNECTION_KEY)) {
      assertTrue(refConnection != null);
      Assert.assertTrue(!refConnection.isClosed());
    }
  }