feat(ext-data): close the connection pool when the app stops
TxManager is AutoCloseable and releases what it was built on: JdbcTxManager its data source when closeable, HibernateTxManager its session factory and then the data source Hibernate was handed, which Hibernate itself never closes. DataExtension registers the close as an onClose callback, so a stopped app no longer leaves its pool connected. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
6d44f9e7b1
commit
d6c018242f
@@ -112,6 +112,8 @@ public abstract class Repository<T, ID> {
|
||||
- `Tx` in the `FlashContext`
|
||||
- `TxManager` in the `FlashContext`
|
||||
- an annotation processor for `@Transactional`
|
||||
- `TxManager.close()` as an `onClose` callback, so stopping the app releases the manager's
|
||||
session factory and connection pool; give the manager a pool you want closed with the app
|
||||
|
||||
This makes the data layer composable with Flash's extension system without global state.
|
||||
|
||||
|
||||
+1
@@ -34,6 +34,7 @@ public final class DataExtension implements FlashExtension {
|
||||
|
||||
@Override
|
||||
public void configure(FlashRegistrar<?> app, FlashContext ctx) {
|
||||
ctx.onClose(txManager::close);
|
||||
ctx.provide(Tx.class, tx);
|
||||
ctx.provide(TxManager.class, txManager);
|
||||
if (data != null) ctx.provide(Data.class, data);
|
||||
|
||||
+5
-1
@@ -1,7 +1,11 @@
|
||||
package dev.relism.flash.ext.data.core;
|
||||
|
||||
public interface TxManager {
|
||||
public interface TxManager extends AutoCloseable {
|
||||
TxStatus begin(TxDefinition definition);
|
||||
void commit(TxStatus status);
|
||||
void rollback(TxStatus status);
|
||||
|
||||
/** Releases what this manager was built on, its connection pool included. {@link dev.relism.flash.ext.data.DataExtension} calls it when the app stops. */
|
||||
@Override
|
||||
void close();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user