[framework] TxCore → common-framework (ACM-FW-001)
This commit is contained in:
parent
dedbfdc4a6
commit
78505a81ea
1 changed files with 77 additions and 0 deletions
|
|
@ -0,0 +1,77 @@
|
||||||
|
package com.klaro.acquirecore.framework;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import jakarta.annotation.PostConstruct;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Service registry replacing C TX_SERVICE/registry pattern.
|
||||||
|
* Acts as a central dispatcher for transactional services.
|
||||||
|
* Annotated with @Service for Spring component scanning.
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class TxServiceRegistry {
|
||||||
|
|
||||||
|
private final Map<String, TxService> services = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
// Registry initialized and ready for service lookups
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a transactional service by name.
|
||||||
|
* Mirrors C tx_registry_add().
|
||||||
|
*/
|
||||||
|
public void registerService(String name, TxService service) {
|
||||||
|
services.put(name, service);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregister a service by name.
|
||||||
|
*/
|
||||||
|
public void unregisterService(String name) {
|
||||||
|
services.remove(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lookup a registered service by name.
|
||||||
|
* Mirrors C tx_registry_lookup().
|
||||||
|
*/
|
||||||
|
public TxService lookupService(String name) {
|
||||||
|
return services.get(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a transactional operation on a named service.
|
||||||
|
* Mirrors C tx_service_dispatch().
|
||||||
|
*/
|
||||||
|
public <T> TxResult<T> dispatch(String serviceName, TxContext ctx, Object input) {
|
||||||
|
TxService service = lookupService(serviceName);
|
||||||
|
if (service == null) {
|
||||||
|
return TxResult.error("SERVICE_NOT_FOUND", "Service not registered: " + serviceName);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Object result = service.execute(ctx, input);
|
||||||
|
return TxResult.ok(result);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return TxResult.error("EXECUTION_FAILED", e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a service is registered.
|
||||||
|
*/
|
||||||
|
public boolean isRegistered(String name) {
|
||||||
|
return services.containsKey(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get count of registered services.
|
||||||
|
*/
|
||||||
|
public int getServiceCount() {
|
||||||
|
return services.size();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in a new issue