0

データベースに接続し、定期的にテーブルをポーリングしてオブジェクトをイベント バスに送信する必要がある非常に小さな Verticle を取得しました。これまでのところ、データベースに接続できますが、その後ハンドラーが実行されず、ポーリング タイマーが開始されません。それは明らかなことであり、あらゆる助けに感謝しています。

Futuresは非推奨であるため、Vert.x 3.8 Promisesを使用します(そのリンクの背後にある例のように)。私のコードでわかるように、非推奨の Futures を使用しても問題なく動作します! しかし、廃止されたコードを使用したい人はいますか? 私が何か間違ったことをしているのか、Vert.x のバグなのか、私が想定していないことです。

私の Vert.x は 3.8.1 です

class JdbcVerticle extends AbstractVerticle {

    private SQLConnection connection

    @Override
    void start(Promise<Void> startPromise) {
        def jdbcParams = config().getJsonObject('connection')
        // This gets executed:
        testFuture().handler = { println "Test Future handler runs!" }

        // This is never executed :-(
        connect(jdbcParams).handler = { println "Connected..." }
    }

    Future<Void> connect(JsonObject jdbcParams) {
        def promise = Promise.<Void>promise()
        def client = JDBCClient.createShared(vertx, jdbcParams)

        client.getConnection() { connection ->
            if(connection.failed()) {
                promise.fail(connection.cause())
            } else {
                this.connection = connection.result()
                promise.complete()
            }
        }

        return promise.future()
    }

    Future<Void> testFuture() {
        def future = Future.<Void>future()
        vertx.setTimer(200) { future.complete() }
        return future
    }
}
4

0 に答える 0