Error Handler

Basically, exception in execution time will be thrown by each particular jdbc driver or reactive SQL driver, it can be spaghetti code, dealing with exception, then jooqx is able to centralize any exception with properly SQL state that thanks to DataAccessException in jOOQ.

It is easy to configure when building executor

With JDBC SQL client

Jooqx jooqx = Jooqx.builder()
                   .setVertx(vertx)
                   .setDSL(dslContext)
                   .setSqlClient(pool)
                   .setErrorConverter(new JDBCErrorConverter())
                   .build();

With JDBC PostgreSQL client

Jooqx jooqx = Jooqx.builder()
                   .setVertx(vertx)
                   .setDSL(dslContext)
                   .setSqlClient(pool)
                   .setErrorConverter(new PgErrorConverter())
                   .build();

Integrating with your existing application exception

So more, you can integrate seamlessly with your existing application exception. For example:

enum ErrorCode {
    DUPLICATE
}

class YourAppError extends RuntimeException {

    final ErrorCode errorCode;

    YourAppError(ErrorCode errorCode, Exception rootCause) {
        super(rootCause);
        this.errorCode = errorCode;
    }

}

And then, when init jooqx, just register it

SQLErrorConverter errorConverter = new JDBCErrorConverter()
    .andThen(dataAccessException -> new YourAppError(ErrorCode.DUPLICATE, dataAccessException));
Jooqx jooqx = Jooqx.builder()
                   .setVertx(vertx)
                   .setDSL(dslContext)
                   .setSqlClient(pool)
                   .setErrorConverter(errorConverter)
                   .build();