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

This commit is contained in:
forge-bot 2026-07-18 11:11:51 +00:00
parent 3e14ccb65c
commit 7b4c48295d

View file

@ -1,31 +1,90 @@
package com.klaro.acquirecore.framework; package com.klaro.acquirecore.framework;
import java.util.HashMap; import java.io.Serializable;
import java.time.Instant;
import java.util.Map; import java.util.Map;
import java.util.UUID;
/** /**
* 레거시 TxCore {@code TXBUF} (고정 슬롯 / 버퍼) Spring 대체 자리표시자. * Transaction context DTO carrying runtime state across service calls.
* * Mirrors the C tx_context struct fields.
* <p> 전환에서는 요청/응답 DTO(record) 정형 필드를 담고, 컨텍스트는
* 서비스 체인({@code tx_call}) 전달되는 느슨한 / 상태만 보관한다.
*/ */
public final class TxContext { public class TxContext implements Serializable {
private final Map<String, Object> slots = new HashMap<>(); private static final long serialVersionUID = 1L;
/** TXBUF 필드 설정 (레거시 {@code Fchg} 상당). */ private String transactionId;
public TxContext put(String key, Object value) { private String serviceName;
slots.put(key, value); private TxStatus status;
return this; private Instant startedAt;
private Instant committedAt;
private Map<String, Object> metadata;
public TxContext() {
this.transactionId = UUID.randomUUID().toString();
this.status = TxStatus.INITIAL;
this.startedAt = Instant.now();
} }
/** TXBUF 필드 조회 (레거시 {@code Fget} 상당). */ public TxContext(String serviceName) {
public Object get(String key) { this();
return slots.get(key); this.serviceName = serviceName;
} }
/** 적재된 슬롯 개수. */ public String getTransactionId() {
public int size() { return transactionId;
return slots.size(); }
public void setTransactionId(String transactionId) {
this.transactionId = transactionId;
}
public String getServiceName() {
return serviceName;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
public TxStatus getStatus() {
return status;
}
public void setStatus(TxStatus status) {
this.status = status;
}
public Instant getStartedAt() {
return startedAt;
}
public void setStartedAt(Instant startedAt) {
this.startedAt = startedAt;
}
public Instant getCommittedAt() {
return committedAt;
}
public void setCommittedAt(Instant committedAt) {
this.committedAt = committedAt;
}
public Map<String, Object> getMetadata() {
return metadata;
}
public void setMetadata(Map<String, Object> metadata) {
this.metadata = metadata;
}
public void markCommitted() {
this.status = TxStatus.COMMITTED;
this.committedAt = Instant.now();
}
public void markRolledBack() {
this.status = TxStatus.ROLLED_BACK;
} }
} }