package io.vertx.example.osgi.jdbc;
import io.vertx.core.*;
import io.vertx.core.Handler;
import io.vertx.core.json.JsonArray;
import io.vertx.example.osgi.service.DataService;
import io.vertx.ext.jdbc.JDBCClient;
import io.vertx.ext.sql.SQLConnection;
import org.apache.felix.ipojo.annotations.*;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Component
@Provides
@Instantiate
public class JDBCServiceConsumer implements DataService {
@Requires
private JDBCClient client;
@Validate
public void start() {
}
@Override
public void retrieve(Handler<AsyncResult<List<String>>> resultHandler) {
client.getConnection(conn -> {
if (conn.failed()) {
resultHandler.handle(Future.failedFuture(conn.cause()));
return;
}
final SQLConnection connection = conn.result();
connection.execute("create table test(id int primary key, name varchar(255))", res -> {
if (res.failed()) {
resultHandler.handle(Future.failedFuture(res.cause()));
return;
}
// insert some test data
List<String> results = new ArrayList<>();
connection.execute("insert into test values(1, 'Hello')", insert -> {
// query some data
connection.query("select * from test", rs -> {
results.addAll(rs.result().getResults().stream().map(JsonArray::encode).collect(Collectors.toList()));
// and close the connection
connection.close(done -> {
if (done.failed()) {
resultHandler.handle(Future.failedFuture(done.cause()));
} else {
resultHandler.handle(Future.succeededFuture(results));
}
});
});
});
});
});
}
}