Create a gist now

Instantly share code, notes, and snippets.

Attempting to integrate Spring Transaction with jOOQ 3.7.0
public class SpringExceptionTranslationExecuteListener
extends DefaultExecuteListener {
/** {@inheritDoc} */
@Override
public void exception(ExecuteContext ctx) {
SQLException e = ctx.sqlException();
if (e != null) {
String name = ctx.configuration().dialect().thirdParty().springDbName();
/* Prefer product name, if available. */
SQLExceptionTranslator translator = (name != null)
? new SQLErrorCodeSQLExceptionTranslator(name)
: new SQLStateSQLExceptionTranslator();
ctx.exception(translator.translate("jOOQ", ctx.sql(), e));
}
}
}
public class SpringTransactionConnectionProvider implements ConnectionProvider {
private final DataSource ds;
public SpringTransactionConnectionProvider(DataSource ds) {
this.ds = ds;
}
/** {@inheritDoc} */
@Override
public Connection acquire() {
try {
return DataSourceUtils.doGetConnection(ds);
} catch (SQLException e) {
throw new DataAccessException(
"Error getting connection from data source " + ds, e);
}
}
/** {@inheritDoc} */
@Override
public void release(Connection conn) {
try {
DataSourceUtils.doReleaseConnection(conn, ds);
} catch (SQLException e) {
throw new DataAccessException("Error closing connection " + conn, e);
}
}
}
public class JooqTransactionFactory {
private final Configuration config = new DefaultConfiguration();
public JooqTransactionFactory(DataSource ds, SQLDialect dialect) {
this(ds, dialect, new Settings().withRenderSchema(false));
}
public JooqTransactionFactory(DataSource ds, SQLDialect dialect,
Settings settings) {
config.set(new SpringTransactionConnectionProvider(ds)).set(dialect).set(
settings).set(
new DefaultExecuteListenerProvider(
new SpringExceptionTranslationExecuteListener()));
}
public DSLContext context() {
return DSL.using(config);
}
}
@lukaseder

Visitors of this gist:

Please do also consider the jOOQ manual's official tutorial on how to integrate jOOQ with Spring:

http://www.jooq.org/doc/latest/manual/getting-started/tutorials/jooq-with-spring/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment