if (newRow != null && newRow.next()) {
final Result<Record> result = create.fetch(newRow);
EventBusUtil.getInstance().post(new ModelPostSavedEvent(result.into(Account.class)));
} else {
final Result<Record> result = create.fetch(oldRow);
EventBusUtil.getInstance().post(new ModelPostRemovedEvent(result.into(Account.class)));
}Hi Lukas,
I've came to the point adding these triggers now. Well, the H2 API offers me 2 possibilities - I extended the TriggerAdapter.
public void fire(final Connection conn, final ResultSet oldRow, final ResultSet newRow) throws SQLException {
}
There's no information about the statement type - but we can get it by checking oldRow and newRow against null.
My idea was now to fetch this resultSet and trigger the event with the resulting pojo.
So first of all - this is requried to get the executor:
final Settings settings = new Settings();
settings.setExecuteLogging(false);
final Executor create = new Executor(conn, SQLDialect.H2, settings);
I have to disable default logging due to my posted issue request to use jooq without writing my own listener.
Then this code is used to to fetch the row - please note - this code might contain some mistakes inside the if condition:
if (newRow != null && newRow.next()) {
final Result<Record> result = create.fetch(newRow);
EventBusUtil.getInstance().post(new ModelPostSavedEvent(result.into(Account.class)));
} else {
final Result<Record> result = create.fetch(oldRow);
EventBusUtil.getInstance().post(new ModelPostRemovedEvent(result.into(Account.class)));
}
Once executing this trigger, I get a huge memory leak (it will "consume" all my memory if not stopped) and a huge cpu usage (up to 100%). I tested the code further and came to the result - this leaks occur once calling:
final Result<Record> result = create.fetch(oldRow);
At least - that's the preferred way outlined at
http://www.jooq.org/doc/2.6/manual/getting-started/use-cases/jooq-as-a-sql-executor/After seeing this - I thought about a deadlock situation that prevents h2 to finish the intial (for example) INSERT statement - this then prevents my trigger from fetching the actual resultset. But this can't be true. First of all there's the API allowing me to use this resultSet, secondly that wouldn't explain that huge memory and cpu usages.
Can you explain what's going on?