[framework] TxCore → common-framework (TxContext·MessageCodec) (ACM-FW-001)

This commit is contained in:
forge-bot 2026-07-18 10:06:08 +00:00
parent 3fd7456027
commit 43cbbab5cc

View file

@ -0,0 +1,65 @@
package com.klaro.acquirecore.framework;
import org.springframework.stereotype.Component;
/**
* Transaction template providing tx_begin/commit/rollback semantics.
* Equivalent to C tx_begin(), tx_commit(), tx_rollback() functions.
*/
@Component
public class TxTemplate {
private final TxServiceRegistry registry;
public TxTemplate(TxServiceRegistry registry) {
this.registry = registry;
}
/**
* Begin a new transaction context - equivalent to C tx_begin().
*/
public TxCore.TxContext begin() {
return new TxCore.TxContext();
}
/**
* Begin with custom flags.
*/
public TxCore.TxContext begin(int flags) {
return new TxCore.TxContext(flags);
}
/**
* Execute action within transaction context.
* Automatically handles rollback on exception.
*/
public <T> T execute(TxCore.TxContext ctx, TxAction<T> action) {
try {
return action.execute(ctx);
} catch (Exception e) {
ctx.resetBuffer();
throw e;
}
}
/**
* Dispatch request to named service - equivalent to C tx_dispatch().
*/
public TxCore.TxResponse dispatch(String serviceName, TxCore.TxRequest request) {
return registry.dispatch(serviceName, request);
}
/**
* Dispatch with new context.
*/
public TxCore.TxResponse dispatch(String serviceName, String operation, Object payload) {
TxCore.TxContext ctx = begin();
TxCore.TxRequest request = new TxCore.TxRequest(serviceName, Map.of(operation, payload), ctx);
return dispatch(serviceName, request);
}
@FunctionalInterface
public interface TxAction<T> {
T execute(TxCore.TxContext context);
}
}