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..710de64 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,53 @@
package com.klaro.acquirecore.framework;
-import java.util.HashMap;
import java.util.Map;
+import java.util.HashMap;
/**
- * 레거시 TxCore {@code TXBUF} (고정 슬롯 키/값 버퍼) 의 Spring 대체 자리표시자.
- *
- *
실 전환에서는 요청/응답 DTO(record) 가 정형 필드를 담고, 이 컨텍스트는
- * 서비스 체인({@code tx_call}) 간 전달되는 느슨한 키/값 상태만 보관한다.
+ * Transaction context DTO holding state for a single transaction lifecycle.
+ * Migrated from txcore.h tx_context_t struct.
*/
-public final class TxContext {
+public class TxContext {
- private final Map slots = new HashMap<>();
-
- /** TXBUF 필드 설정 (레거시 {@code Fchg} 상당). */
- public TxContext put(String key, Object value) {
- slots.put(key, value);
- return this;
+ /** Transaction state enumeration. Migrated from txcore.h tx_state_t. */
+ public enum TxState {
+ IDLE, PENDING, ACTIVE, COMMITTED, ROLLED_BACK, FAILED
}
- /** TXBUF 필드 조회 (레거시 {@code Fget} 상당). */
- public Object get(String key) {
- return slots.get(key);
+ private String txId;
+ private String serviceName;
+ private TxState state;
+ private long startTime;
+ private long endTime;
+ private Map attributes;
+ private String errorMessage;
+
+ public TxContext() {
+ this.attributes = new HashMap<>();
+ this.state = TxState.IDLE;
}
- /** 적재된 슬롯 개수. */
- public int size() {
- return slots.size();
+ public TxContext(String txId, String serviceName) {
+ this();
+ this.txId = txId;
+ this.serviceName = serviceName;
}
+
+ public String getTxId() { return txId; }
+ public void setTxId(String txId) { this.txId = txId; }
+ public String getServiceName() { return serviceName; }
+ public void setServiceName(String serviceName) { this.serviceName = serviceName; }
+ public TxState getState() { return state; }
+ public void setState(TxState state) { this.state = state; }
+ public long getStartTime() { return startTime; }
+ public void setStartTime(long startTime) { this.startTime = startTime; }
+ public long getEndTime() { return endTime; }
+ public void setEndTime(long endTime) { this.endTime = endTime; }
+ public Map getAttributes() { return attributes; }
+ public void setAttributes(Map attributes) { this.attributes = attributes; }
+ public Object getAttribute(String key) { return attributes.get(key); }
+ public void setAttribute(String key, Object value) { attributes.put(key, value); }
+ public String getErrorMessage() { return errorMessage; }
+ public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; }
+ public boolean isActive() { return state == TxState.ACTIVE || state == TxState.PENDING; }
}