class Embulk::InputPlugin::JavaAdapter

def transaction(java_config, java_control)

def transaction(java_config, java_control)
  config = DataSource.from_java(java_config)
  config_diff_hash = @ruby_class.transaction(config) do |task_source_hash,columns,task_count|
    java_task_source = DataSource.from_ruby_hash(task_source_hash).to_java
    java_schema = Schema.new(columns).to_java
    java_task_reports = java_control.run(java_task_source, java_schema, task_count)
    java_task_reports.map {|java_task_report|
      DataSource.from_java(java_task_report)
    }
  end
  # TODO check return type of #transaction
  return DataSource.from_ruby_hash(config_diff_hash).to_java
end