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

This commit is contained in:
forge-bot 2026-07-18 10:10:44 +00:00
parent f10a82ec16
commit 63f85f0f81

View file

@ -0,0 +1,69 @@
package com.klaro.acquirecore.framework;
import org.springframework.stereotype.Service;
import jakarta.annotation.PostConstruct;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.BiConsumer;
/**
* Service registry for transaction services. Migrated from txcore.c tx_service_registry.
* Replaces TX_SERVICE/registry pattern with @Service dispatch.
*/
@Service
public class TxServiceRegistry {
/** Functional interface for transaction service handlers. */
@FunctionalInterface
public interface TxServiceHandler {
TxResult execute(TxContext context);
}
private final Map<String, TxServiceHandler> services = new ConcurrentHashMap<>();
private final Map<String, TxConfig> serviceConfigs = new ConcurrentHashMap<>();
@PostConstruct
public void initialize() {}
public void registerService(String serviceName, TxServiceHandler handler) {
services.put(serviceName, handler);
}
public void registerService(String serviceName, TxServiceHandler handler, TxConfig config) {
services.put(serviceName, handler);
serviceConfigs.put(serviceName, config);
}
public void unregisterService(String serviceName) {
services.remove(serviceName);
serviceConfigs.remove(serviceName);
}
public TxServiceHandler getService(String serviceName) {
return services.get(serviceName);
}
public boolean hasService(String serviceName) {
return services.containsKey(serviceName);
}
public TxConfig getConfig(String serviceName) {
return serviceConfigs.getOrDefault(serviceName, new TxConfig());
}
public TxResult execute(String serviceName, TxContext context) {
TxServiceHandler handler = services.get(serviceName);
if (handler == null) {
return TxResult.fail(context.getTxId(), "Service not found: " + serviceName);
}
return handler.execute(context);
}
public void forEachService(BiConsumer<String, TxServiceHandler> action) {
services.forEach(action);
}
public int getServiceCount() {
return services.size();
}
}