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