The keycloak project ended with four open questions that design could not
settle. A two-VM lab was built to answer them by measurement, and this is
that material: 26 experiments, 125 raw command outputs, 22 browser captures.
Follows the import procedure in README.md.
source/ the originating repository verbatim — 78 documents, 28 SVGs,
8 manifests, plus .source-revision recording the commit
final/ the SSOT
document.md 729 lines written from the 29 experiment documents, not
concatenated: what was predicted, what was measured, and
where the measurement itself was wrong
evidence/raw 125 outputs, flattened to <experiment>__<file> because
the originals collided (01-baseline.txt appeared three
times) and the audit only globs the top level
evidence/meta one per raw file; command and exitCode are null and the
README says why rather than inventing them
evidence/browser 22 captures
assets/ three diagrams through techviz
.techviz/ their VizSpecs
A separate project rather than an addition to keycloak: the B-layer answers
that project's four questions, but the A, C and D layers are about cluster
failure, SSO and operations, and one document.md should hold one subject.
The four question records there can point here through 관계.
Recorded rather than papered over: only three of the 28 diagrams were
remade. The repository forbids hand-drawn SVG and forbids titles inside the
canvas; all 28 originals carry both, so converting them is redrawing, not
reformatting. They stay in source/ and the gap is written into the document.
verify-pipeline.py passes. audit-records.py reports no issues.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
219 lines
45 KiB
XML
219 lines
45 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="4462" viewBox="0 0 1200 4462" role="img">
|
|
<title>terminal evidence</title>
|
|
<desc>Terminal-style rendering generated from retained command output. Sensitive-looking values are redacted in the visual asset.</desc>
|
|
<rect x="1" y="1" width="1198" height="4460" rx="14" fill="#0d1117" stroke="#30363d"/>
|
|
<rect x="1" y="1" width="1198" height="44" rx="14" fill="#161b22"/>
|
|
<rect x="1" y="30" width="1198" height="14" fill="#161b22"/>
|
|
<circle cx="24" cy="22" r="6" fill="#ff5f57"/>
|
|
<circle cx="44" cy="22" r="6" fill="#febc2e"/>
|
|
<circle cx="64" cy="22" r="6" fill="#28c840"/>
|
|
<text x="92" y="27" fill="#8b949e" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace">terminal evidence</text>
|
|
<text x="24" y="68" fill="#c9d1d9" font-size="15" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0">$ #!/bin/bash
|
|
set -euo pipefail
|
|
cd /shared/codebase/clean-architecture-backend-template
|
|
B=src/adapter/outbound/persisten</tspan><tspan x="24" dy="22">ce-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/postgresql/idempotency
|
|
G=$B/IdempotencyCapabilityGuard.</tspan><tspan x="24" dy="22">java
|
|
S=$B/PostgreSqlOwnerSafeIdempotencyStore.java
|
|
test -f "$G"; test -f "$S"
|
|
|
|
echo "# 가드가 자기 존재 이유로 적는 것"
|
|
</tspan><tspan x="24" dy="22">awk 'NR>=9 && NR<=23 {printf " IdempotencyCapabilityGuard.java:%d %s\n", NR, $0}' $G
|
|
|
|
echo
|
|
echo "# 그 데이터소스 필드는</tspan><tspan x="24" dy="22"> 어떻게 들어오는가"
|
|
awk 'NR>=28 && NR<=39 {printf " IdempotencyCapabilityGuard.java:%d %s\n", NR, $0}' $G
|
|
|
|
echo
|
|
echo "#</tspan><tspan x="24" dy="22"> 세 번째 질문을 지금 어떻게 묻는가"
|
|
awk 'NR>=87 && NR<=109 {printf " IdempotencyCapabilityGuard.java:%d %s\n", NR, $0}'</tspan><tspan x="24" dy="22"> $G
|
|
|
|
echo
|
|
echo "# 그 필드 값을 정하는 곳"
|
|
awk 'NR>=84 && NR<=109 {printf " PostgreSqlOwnerSafeIdempotencyStore.java:%d </tspan><tspan x="24" dy="22">%s\n", NR, $0}' $S
|
|
|
|
echo
|
|
echo "# 이 저장소를 만드는 자리 전부와 각각이 넘기는 것"
|
|
git grep -n 'new PostgreSqlOwnerSafeId</tspan><tspan x="24" dy="22">empotencyStore' \
|
|
| sed -E 's#^src/[^:]*/src/([a-zA-Z]+)/java/dev/caskeleton/[^:]*/([^:/]+):([0-9]+):# \1 · \2:\3 #'</tspan><tspan x="24" dy="22">
|
|
echo " 그 자리들이 넘기는 JdbcOperations 의 출처 :"
|
|
P=src/app-bootstrap/src/main/java/dev/caskeleton/bootstrap/idempot</tspan><tspan x="24" dy="22">ency/PostgreSqlIdempotencyProviderConfig.java
|
|
awk 'NR>=55 && NR<=62 {printf " PostgreSqlIdempotencyProviderConfig.jav</tspan><tspan x="24" dy="22">a:%d %s\n", NR, $0}' $P
|
|
U=src/adapter/outbound/persistence-jpa/src/test/java/dev/caskeleton/adapter/outbound/persistence</tspan><tspan x="24" dy="22">/postgresql/idempotency/OwnerSafeIdempotencyPreconditionTest.java
|
|
awk 'NR>=44 && NR<=48 {printf " OwnerSafeIdempotenc</tspan><tspan x="24" dy="22">yPreconditionTest.java:%d %s\n", NR, $0}' $U
|
|
echo " 저장소에 JdbcOperations 구현이나 JdbcTemplate 하위 클래스가 있는가 </tspan><tspan x="24" dy="22">:"
|
|
{ git grep -ln 'implements JdbcOperations\|extends JdbcTemplate' -- 'src/**/*.java' || echo " 0 건"; } | sed 's/^/</tspan><tspan x="24" dy="22"> /'
|
|
|
|
echo
|
|
echo "# 세 번째 검사를 덮는 시험이 있는가"
|
|
{ git grep -n "belongs to another one" -- 'src' || echo " 0 </tspan><tspan x="24" dy="22">건"; } | sed 's#.*/# #'
|
|
echo " 전제 시험이 단언하는 것 :"
|
|
grep -n ' void ' $U | sed -E 's#^([0-9]+): *# OwnerSaf</tspan><tspan x="24" dy="22">eIdempotencyPreconditionTest.java:\1 #'
|
|
|
|
echo
|
|
echo "# 가드를 부르는 자리"
|
|
git grep -n 'requirePrimaryWriteTransaction\|</tspan><tspan x="24" dy="22">requireActiveCapability' -- 'src/**/*.java' \
|
|
| sed -E 's#^src/[^:]*/src/([a-zA-Z]+)/java/dev/caskeleton/[^:]*/([^:/]+</tspan><tspan x="24" dy="22">):([0-9]+):# \1 · \2:\3 #' | cut -c1-120
|
|
|
|
echo
|
|
echo "# 형제 어댑터는 같은 질문을 어떻게 묻고 데이터소스를 어떻게 받는</tspan><tspan x="24" dy="22">가"
|
|
for f in PostgreSqlImmutableOutboxAppendAdapter PostgreSqlSameStoreInboxAdapter; do
|
|
p=$(find src -name $f.java -pa</tspan><tspan x="24" dy="22">th '*/main/*')
|
|
echo " $f :"
|
|
grep -nE 'private final DataSource|public '"$f"'\(DataSource|requireNonNull\(dataSource</tspan><tspan x="24" dy="22">|requireSameResourcePrimaryWriteTransaction\(\) \{|isActualTransactionActive|isCurrentTransactionReadOnly|hasResource' $</tspan><tspan x="24" dy="22">p \
|
|
| sed -E "s#^([0-9]+): *# $f.java:\1 #"
|
|
done
|
|
</tspan></text>
|
|
<text x="24" y="596" fill="#8b949e" font-size="13" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0">cwd: /shared/codebase/clean-architecture-backend-template</tspan></text>
|
|
<text x="24" y="618" fill="#8b949e" font-size="13" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0">time: 2026-09-04T03:26:45+00:00 · exit 0</tspan></text>
|
|
<line x1="24" y1="632" x2="1176" y2="632" stroke="#30363d"/>
|
|
<text x="24" y="672" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 가드가 자기 존재 이유로 적는 것</tspan></text>
|
|
<text x="24" y="694" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:9 /**</tspan></text>
|
|
<text x="24" y="716" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:10 * The preconditions a mutation must meet before any SQL runs.</tspan></text>
|
|
<text x="24" y="738" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:11 *</tspan></text>
|
|
<text x="24" y="760" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:12 * <p>Its own type because these are three separate questions — is the schema sanctioned, </tspan><tspan x="24" dy="22">is there a</tspan></text>
|
|
<text x="24" y="804" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:13 * transaction, is it <em>this</em> store's transaction — and the store answered the third</tspan><tspan x="24" dy="22"> one</tspan></text>
|
|
<text x="24" y="848" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:14 * wrongly. It checked that the thread had an active read-write transaction, which is true </tspan><tspan x="24" dy="22">whenever</tspan></text>
|
|
<text x="24" y="892" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:15 * any transaction is open on any data source; the sibling outbox and inbox adapters check </tspan><tspan x="24" dy="22">{@code</tspan></text>
|
|
<text x="24" y="936" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:16 * hasResource(dataSource)}, which is the question that actually matters.</tspan></text>
|
|
<text x="24" y="958" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:17 *</tspan></text>
|
|
<text x="24" y="980" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:18 * <p>The difference shows up in an application with two data sources: a mutation issued in</tspan><tspan x="24" dy="22">side the</tspan></text>
|
|
<text x="24" y="1024" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:19 * <em>other</em> one's transaction passed the old check, ran against this store's connecti</tspan><tspan x="24" dy="22">on</tspan></text>
|
|
<text x="24" y="1068" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:20 * outside any transaction, and committed independently of the work it was supposed to be a</tspan><tspan x="24" dy="22">tomic</tspan></text>
|
|
<text x="24" y="1112" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:21 * with.</tspan></text>
|
|
<text x="24" y="1134" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:22 */</tspan></text>
|
|
<text x="24" y="1156" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:23 final class IdempotencyCapabilityGuard {</tspan></text>
|
|
<text x="24" y="1178" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="1200" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 그 데이터소스 필드는 어떻게 들어오는가</tspan></text>
|
|
<text x="24" y="1222" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:28 private final JdbcOperations jdbc;</tspan></text>
|
|
<text x="24" y="1244" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:29 private final DataSource dataSource;</tspan></text>
|
|
<text x="24" y="1266" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:30 private final String activeCapabilitySql;</tspan></text>
|
|
<text x="24" y="1288" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:31 </tspan></text>
|
|
<text x="24" y="1310" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:32 private volatile boolean postgreSqlConfirmed;</tspan></text>
|
|
<text x="24" y="1332" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:33 </tspan></text>
|
|
<text x="24" y="1354" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:34 IdempotencyCapabilityGuard(</tspan></text>
|
|
<text x="24" y="1376" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:35 JdbcOperations jdbc, DataSource dataSource, String activeCapabilitySql) {</tspan></text>
|
|
<text x="24" y="1398" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:36 this.jdbc = Objects.requireNonNull(jdbc, "jdbc");</tspan></text>
|
|
<text x="24" y="1420" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:37 this.dataSource = dataSource;</tspan></text>
|
|
<text x="24" y="1442" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:38 this.activeCapabilitySql = Objects.requireNonNull(activeCapabilitySql, "activeCapabilit</tspan><tspan x="24" dy="22">ySql");</tspan></text>
|
|
<text x="24" y="1486" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:39 }</tspan></text>
|
|
<text x="24" y="1508" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="1530" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 세 번째 질문을 지금 어떻게 묻는가</tspan></text>
|
|
<text x="24" y="1552" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:87 /**</tspan></text>
|
|
<text x="24" y="1574" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:88 * Fails closed unless this store's own data source is enlisted in a read-write transacti</tspan><tspan x="24" dy="22">on.</tspan></text>
|
|
<text x="24" y="1618" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:89 *</tspan></text>
|
|
<text x="24" y="1640" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:90 * @throws IllegalStateException naming which of the three conditions failed</tspan></text>
|
|
<text x="24" y="1662" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:91 */</tspan></text>
|
|
<text x="24" y="1684" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:92 void requirePrimaryWriteTransaction() {</tspan></text>
|
|
<text x="24" y="1706" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:93 if (!TransactionSynchronizationManager.isActualTransactionActive()) {</tspan></text>
|
|
<text x="24" y="1728" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:94 throw new IllegalStateException(</tspan></text>
|
|
<text x="24" y="1750" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:95 "owner-safe idempotency mutation requires an active primary transaction");</tspan></text>
|
|
<text x="24" y="1772" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:96 }</tspan></text>
|
|
<text x="24" y="1794" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:97 if (TransactionSynchronizationManager.isCurrentTransactionReadOnly()) {</tspan></text>
|
|
<text x="24" y="1816" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:98 throw new IllegalStateException(</tspan></text>
|
|
<text x="24" y="1838" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:99 "owner-safe idempotency mutation requires a read-write transaction");</tspan></text>
|
|
<text x="24" y="1860" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:100 }</tspan></text>
|
|
<text x="24" y="1882" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:101 if (dataSource != null && !TransactionSynchronizationManager.hasResource(dataSource)) </tspan><tspan x="24" dy="22">{</tspan></text>
|
|
<text x="24" y="1926" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:102 // The exact check the outbox and inbox adapters already make. Without it, a transac</tspan><tspan x="24" dy="22">tion on</tspan></text>
|
|
<text x="24" y="1970" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:103 // another data source satisfied the guard while this store's work committed on its </tspan><tspan x="24" dy="22">own.</tspan></text>
|
|
<text x="24" y="2014" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:104 throw new IllegalStateException(</tspan></text>
|
|
<text x="24" y="2036" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:105 "owner-safe idempotency mutation requires a transaction bound to this store's da</tspan><tspan x="24" dy="22">ta"</tspan></text>
|
|
<text x="24" y="2080" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:106 + " source; the active transaction belongs to another one");</tspan></text>
|
|
<text x="24" y="2102" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:107 }</tspan></text>
|
|
<text x="24" y="2124" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:108 }</tspan></text>
|
|
<text x="24" y="2146" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:109 }</tspan></text>
|
|
<text x="24" y="2168" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="2190" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 그 필드 값을 정하는 곳</tspan></text>
|
|
<text x="24" y="2212" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:84 public PostgreSqlOwnerSafeIdempotencyStore(JdbcOperations jdbc) {</tspan></text>
|
|
<text x="24" y="2234" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:85 this(jdbc, new SecureRandom());</tspan></text>
|
|
<text x="24" y="2256" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:86 }</tspan></text>
|
|
<text x="24" y="2278" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:87 </tspan></text>
|
|
<text x="24" y="2300" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:88 PostgreSqlOwnerSafeIdempotencyStore(JdbcOperations jdbc, SecureRandom secureRand</tspan><tspan x="24" dy="22">om) {</tspan></text>
|
|
<text x="24" y="2344" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:89 Objects.requireNonNull(jdbc, "jdbc");</tspan></text>
|
|
<text x="24" y="2366" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:90 this.secureRandom = Objects.requireNonNull(secureRandom, "secureRandom");</tspan></text>
|
|
<text x="24" y="2388" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:91 this.guard = new IdempotencyCapabilityGuard(jdbc, dataSourceOf(jdbc), ACTIVE_C</tspan><tspan x="24" dy="22">APABILITY_SQL);</tspan></text>
|
|
<text x="24" y="2432" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:92 this.rows = new IdempotencyRowMapper(jdbc);</tspan></text>
|
|
<text x="24" y="2454" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:93 this.claims = new IdempotencyClaimGateway(jdbc);</tspan></text>
|
|
<text x="24" y="2476" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:94 this.transitions = new IdempotencyTransitionGateway(jdbc);</tspan></text>
|
|
<text x="24" y="2498" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:95 }</tspan></text>
|
|
<text x="24" y="2520" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:96 </tspan></text>
|
|
<text x="24" y="2542" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:97 /**</tspan></text>
|
|
<text x="24" y="2564" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:98 * The data source behind this store's operations, when it can be determined.</tspan></text>
|
|
<text x="24" y="2586" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:99 *</tspan></text>
|
|
<text x="24" y="2608" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:100 * <p>{@code JdbcTemplate} knows its own; a hand-rolled {@code JdbcOperations} </tspan><tspan x="24" dy="22">may not. The guard</tspan></text>
|
|
<text x="24" y="2652" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:101 * treats an unknown data source as "cannot check", which is weaker than the ou</tspan><tspan x="24" dy="22">tbox adapter's</tspan></text>
|
|
<text x="24" y="2696" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:102 * exact check and still stronger than what was here before — but it is the ho</tspan><tspan x="24" dy="22">nest answer when the</tspan></text>
|
|
<text x="24" y="2740" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:103 * collaborator genuinely cannot be identified.</tspan></text>
|
|
<text x="24" y="2762" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:104 */</tspan></text>
|
|
<text x="24" y="2784" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:105 private static javax.sql.DataSource dataSourceOf(JdbcOperations jdbc) {</tspan></text>
|
|
<text x="24" y="2806" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:106 return jdbc instanceof org.springframework.jdbc.core.JdbcTemplate template</tspan></text>
|
|
<text x="24" y="2828" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:107 ? template.getDataSource()</tspan></text>
|
|
<text x="24" y="2850" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:108 : null;</tspan></text>
|
|
<text x="24" y="2872" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlOwnerSafeIdempotencyStore.java:109 }</tspan></text>
|
|
<text x="24" y="2894" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="2916" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 이 저장소를 만드는 자리 전부와 각각이 넘기는 것</tspan></text>
|
|
<text x="24" y="2938" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> postgresqlIntegrationTest · PostgreSqlIdempotencyIntegrationTest.java:61 store = new PostgreSqlOwnerSafeIdempotencyStore(</tspan><tspan x="24" dy="22">jdbc);</tspan></text>
|
|
<text x="24" y="2982" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · OwnerSafeIdempotencyPreconditionTest.java:47 new PostgreSqlOwnerSafeIdempotencyStore(jdbc);</tspan></text>
|
|
<text x="24" y="3004" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · PostgreSqlIdempotencyProviderConfig.java:60 return new PostgreSqlOwnerSafeIdempotencyStore(jdbc);</tspan></text>
|
|
<text x="24" y="3026" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> 그 자리들이 넘기는 JdbcOperations 의 출처 :</tspan></text>
|
|
<text x="24" y="3048" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlIdempotencyProviderConfig.java:55 * @param jdbc the primary {@code JdbcOperations}; the store's transaction gua</tspan><tspan x="24" dy="22">rd identifies its</tspan></text>
|
|
<text x="24" y="3092" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlIdempotencyProviderConfig.java:56 * data source from it so a transaction opened on a different one cannot p</tspan><tspan x="24" dy="22">ass</tspan></text>
|
|
<text x="24" y="3136" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlIdempotencyProviderConfig.java:57 */</tspan></text>
|
|
<text x="24" y="3158" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlIdempotencyProviderConfig.java:58 @Bean</tspan></text>
|
|
<text x="24" y="3180" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlIdempotencyProviderConfig.java:59 IdempotencyStorePortV2 postgreSqlOwnerSafeIdempotencyStore(JdbcOperations jdbc</tspan><tspan x="24" dy="22">) {</tspan></text>
|
|
<text x="24" y="3224" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlIdempotencyProviderConfig.java:60 return new PostgreSqlOwnerSafeIdempotencyStore(jdbc);</tspan></text>
|
|
<text x="24" y="3246" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlIdempotencyProviderConfig.java:61 }</tspan></text>
|
|
<text x="24" y="3268" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlIdempotencyProviderConfig.java:62 </tspan></text>
|
|
<text x="24" y="3290" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> OwnerSafeIdempotencyPreconditionTest.java:44 </tspan></text>
|
|
<text x="24" y="3312" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> OwnerSafeIdempotencyPreconditionTest.java:45 private final JdbcOperations jdbc = mock(JdbcOperations.class);</tspan></text>
|
|
<text x="24" y="3334" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> OwnerSafeIdempotencyPreconditionTest.java:46 private final PostgreSqlOwnerSafeIdempotencyStore store =</tspan></text>
|
|
<text x="24" y="3356" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> OwnerSafeIdempotencyPreconditionTest.java:47 new PostgreSqlOwnerSafeIdempotencyStore(jdbc);</tspan></text>
|
|
<text x="24" y="3378" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> OwnerSafeIdempotencyPreconditionTest.java:48 </tspan></text>
|
|
<text x="24" y="3400" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> 저장소에 JdbcOperations 구현이나 JdbcTemplate 하위 클래스가 있는가 :</tspan></text>
|
|
<text x="24" y="3422" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> 0 건</tspan></text>
|
|
<text x="24" y="3444" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="3466" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 세 번째 검사를 덮는 시험이 있는가</tspan></text>
|
|
<text x="24" y="3488" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> IdempotencyCapabilityGuard.java:106: + " source; the active transaction belongs to another one");</tspan></text>
|
|
<text x="24" y="3510" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> 전제 시험이 단언하는 것 :</tspan></text>
|
|
<text x="24" y="3532" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> OwnerSafeIdempotencyPreconditionTest.java:50 void clearTransactionState() {</tspan></text>
|
|
<text x="24" y="3554" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> OwnerSafeIdempotencyPreconditionTest.java:57 void aClaimWithNoTransactionIsRefused() {</tspan></text>
|
|
<text x="24" y="3576" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> OwnerSafeIdempotencyPreconditionTest.java:67 void aClaimAgainstAnotherVendorIsRefused() throws Exception {</tspan></text>
|
|
<text x="24" y="3598" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> OwnerSafeIdempotencyPreconditionTest.java:81 void aClaimAgainstAnUnsanctionedStreamIsRefused() throws Exception {</tspan></text>
|
|
<text x="24" y="3620" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="3642" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 가드를 부르는 자리</tspan></text>
|
|
<text x="24" y="3664" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · IdempotencyCapabilityGuard.java:55 void requireActiveCapability() {</tspan></text>
|
|
<text x="24" y="3686" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · IdempotencyCapabilityGuard.java:92 void requirePrimaryWriteTransaction() {</tspan></text>
|
|
<text x="24" y="3708" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · PostgreSqlOwnerSafeIdempotencyStore.java:122 requirePrimaryWriteTransaction();</tspan></text>
|
|
<text x="24" y="3730" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · PostgreSqlOwnerSafeIdempotencyStore.java:123 requireActiveCapability();</tspan></text>
|
|
<text x="24" y="3752" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · PostgreSqlOwnerSafeIdempotencyStore.java:176 requirePrimaryWriteTransaction();</tspan></text>
|
|
<text x="24" y="3774" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · PostgreSqlOwnerSafeIdempotencyStore.java:211 requirePrimaryWriteTransaction();</tspan></text>
|
|
<text x="24" y="3796" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · PostgreSqlOwnerSafeIdempotencyStore.java:255 requirePrimaryWriteTransaction();</tspan></text>
|
|
<text x="24" y="3818" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · PostgreSqlOwnerSafeIdempotencyStore.java:303 requirePrimaryWriteTransaction();</tspan></text>
|
|
<text x="24" y="3840" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · PostgreSqlOwnerSafeIdempotencyStore.java:360 requirePrimaryWriteTransaction();</tspan></text>
|
|
<text x="24" y="3862" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · PostgreSqlOwnerSafeIdempotencyStore.java:502 private void requireActiveCapability() {</tspan></text>
|
|
<text x="24" y="3884" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · PostgreSqlOwnerSafeIdempotencyStore.java:503 guard.requireActiveCapability();</tspan></text>
|
|
<text x="24" y="3906" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · PostgreSqlOwnerSafeIdempotencyStore.java:506 private void requirePrimaryWriteTransaction() {</tspan></text>
|
|
<text x="24" y="3928" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · PostgreSqlOwnerSafeIdempotencyStore.java:507 guard.requirePrimaryWriteTransaction();</tspan></text>
|
|
<text x="24" y="3950" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · PostgreSqlSameStoreInboxAdapter.java:227 requireActiveCapability();</tspan></text>
|
|
<text x="24" y="3972" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · PostgreSqlSameStoreInboxAdapter.java:494 private void requireActiveCapability() {</tspan></text>
|
|
<text x="24" y="3994" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · PostgreSqlImmutableOutboxAppendAdapter.java:166 requireActiveCapability();</tspan></text>
|
|
<text x="24" y="4016" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · PostgreSqlImmutableOutboxAppendAdapter.java:312 private void requireActiveCapability() {</tspan></text>
|
|
<text x="24" y="4038" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
|
|
<text x="24" y="4060" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 형제 어댑터는 같은 질문을 어떻게 묻고 데이터소스를 어떻게 받는가</tspan></text>
|
|
<text x="24" y="4082" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlImmutableOutboxAppendAdapter :</tspan></text>
|
|
<text x="24" y="4104" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlImmutableOutboxAppendAdapter.java:149 private final DataSource dataSource;</tspan></text>
|
|
<text x="24" y="4126" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlImmutableOutboxAppendAdapter.java:153 public PostgreSqlImmutableOutboxAppendAdapter(DataSource dataSource) {</tspan></text>
|
|
<text x="24" y="4148" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlImmutableOutboxAppendAdapter.java:158 this.dataSource = Objects.requireNonNull(dataSource, "dataSource");</tspan></text>
|
|
<text x="24" y="4170" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlImmutableOutboxAppendAdapter.java:320 private void requireSameResourcePrimaryWriteTransaction() {</tspan></text>
|
|
<text x="24" y="4192" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlImmutableOutboxAppendAdapter.java:321 if (!TransactionSynchronizationManager.isActualTransactionActive()) {</tspan></text>
|
|
<text x="24" y="4214" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlImmutableOutboxAppendAdapter.java:325 if (TransactionSynchronizationManager.isCurrentTransactionReadOnly()) {</tspan></text>
|
|
<text x="24" y="4236" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlImmutableOutboxAppendAdapter.java:328 if (!TransactionSynchronizationManager.hasResource(dataSource)) {</tspan></text>
|
|
<text x="24" y="4258" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlSameStoreInboxAdapter :</tspan></text>
|
|
<text x="24" y="4280" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlSameStoreInboxAdapter.java:199 private final DataSource dataSource;</tspan></text>
|
|
<text x="24" y="4302" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlSameStoreInboxAdapter.java:204 public PostgreSqlSameStoreInboxAdapter(DataSource dataSource) {</tspan></text>
|
|
<text x="24" y="4324" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlSameStoreInboxAdapter.java:210 this.dataSource = Objects.requireNonNull(dataSource, "dataSource");</tspan></text>
|
|
<text x="24" y="4346" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlSameStoreInboxAdapter.java:502 private void requireSameResourcePrimaryWriteTransaction() {</tspan></text>
|
|
<text x="24" y="4368" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlSameStoreInboxAdapter.java:503 if (!TransactionSynchronizationManager.isActualTransactionActive()</tspan></text>
|
|
<text x="24" y="4390" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlSameStoreInboxAdapter.java:504 || TransactionSynchronizationManager.isCurrentTransactionReadOnly()</tspan></text>
|
|
<text x="24" y="4412" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PostgreSqlSameStoreInboxAdapter.java:505 || !TransactionSynchronizationManager.hasResource(dataSource)) {</tspan></text>
|
|
</svg>
|