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>
260 lines
53 KiB
XML
260 lines
53 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="5540" viewBox="0 0 1200 5540" 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="5538" 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">$ set -e
|
|
set -o pipefail
|
|
J=src/app-bootstrap/src/main/java/dev/caskeleton/bootstrap/autoconfigure/jpa
|
|
P=src/app-bootstra</tspan><tspan x="24" dy="22">p/src/main/java/dev/caskeleton/bootstrap/autoconfigure/persistencejpa
|
|
R=src/app-bootstrap/src/main/java/dev/caskeleton/b</tspan><tspan x="24" dy="22">ootstrap/runtime
|
|
T=src/app-bootstrap/src/test/java/dev/caskeleton/bootstrap/autoconfigure/jpa
|
|
strip() { sed -E 's#^src/[</tspan><tspan x="24" dy="22">^:]*/src/(main|test)/[^:]*/([^:/]+):([0-9]+):# \1 · \2:\3 #'; }
|
|
cut_range() { awk -v f="$2" -v a="$3" -v b="$4" 'NR>=a</tspan><tspan x="24" dy="22"> && NR<=b {printf " %s:%d %s\n", f, NR, $0}' "$1"; }
|
|
|
|
echo "# 검증기 자바독이 적은 두 결함과 그 상쇄"
|
|
cut_range $J/JpaD</tspan><tspan x="24" dy="22">ataSourceProfileValidator.java JpaDataSourceProfileValidator.java 11 19
|
|
|
|
echo
|
|
echo "# 그 병렬 네임스페이스가 src 안에 남</tspan><tspan x="24" dy="22">아 있는 자리"
|
|
git grep -n 'app.jpa-platform.datasource' -- 'src/**' | strip
|
|
echo " src 밖에서 이 문자열을 쓰는 파일과 </tspan><tspan x="24" dy="22">줄 수 :"
|
|
git grep -c 'app.jpa-platform.datasource' | grep -v '^src/' | sed 's#^# #'
|
|
echo " 그중 운영자용 표에 살아 </tspan><tspan x="24" dy="22">있는 줄 :"
|
|
grep -n 'app.jpa-platform.datasource' infra/jpa/postgres/README.md | cut -c1-150 | sed 's#^# infra/jpa/pos</tspan><tspan x="24" dy="22">tgres/README.md:#'
|
|
n=$(git grep -l 'app.jpa-platform.datasource' -- 'src/**/*.yml' 'src/**/*.yaml' 'src/**/*.properties'</tspan><tspan x="24" dy="22"> 2>/dev/null | wc -l || true)
|
|
echo " 설정 파일(yml·yaml·properties)에서 : $n 건"
|
|
cm=$(git grep -n 'app.jpa-platform.d</tspan><tspan x="24" dy="22">atasource' -- 'src/**/*.java' | grep '/main/' | grep -cv '\* \|//' || true)
|
|
ct=$(git grep -n 'app.jpa-platform.datasourc</tspan><tspan x="24" dy="22">e' -- 'src/**/*.java' | grep '/test/' | grep -cv '\* \|//' || true)
|
|
echo " 그중 주석이 아닌 줄 : main $cm 건 · test $c</tspan><tspan x="24" dy="22">t 건 (test 쪽은 회귀 테스트의 검색 문자열)"
|
|
f=$(find src -name 'JpaDataSourceSettings.java' -not -path '*/build/*' | wc </tspan><tspan x="24" dy="22">-l || true)
|
|
echo " 그것을 바인딩하던 JpaDataSourceSettings 클래스 : $f 건"
|
|
|
|
echo
|
|
echo "# 옛 상한 검사 메서드 이름이 남</tspan><tspan x="24" dy="22">아 있는 자리"
|
|
git grep -n 'requirePoolBounds' -- 'src/**/*.java' | strip
|
|
|
|
echo
|
|
echo "# 지금 검증기가 읽는 것과 던지는 것</tspan><tspan x="24" dy="22">"
|
|
cut_range $J/JpaDataSourceProfileValidator.java JpaDataSourceProfileValidator.java 50 66
|
|
|
|
echo
|
|
echo "# validateResolve</tspan><tspan x="24" dy="22">d 를 부르는 자리 전부"
|
|
git grep -n 'validateResolved' -- 'src/**/*.java' | grep -v '/JpaDataSourceProfileValidator.java:</tspan><tspan x="24" dy="22">' | strip
|
|
|
|
echo
|
|
echo "# 그 호출자가 붙는 조건과 출하 기본값"
|
|
awk 'NR>=56 && NR<=61 {printf " PersistenceJpaRootAutoConf</tspan><tspan x="24" dy="22">iguration.java:%d %s\n", NR, $0}' $P/PersistenceJpaRootAutoConfiguration.java
|
|
grep -n 'APP_PERSISTENCE_JPA_ENABLED' src/</tspan><tspan x="24" dy="22">app-bootstrap/src/main/resources/application.yml | head -1 | sed 's#^# application.yml:#'
|
|
|
|
echo
|
|
echo "# 직접 생성의 이</tspan><tspan x="24" dy="22">유로 적힌 조건과, 그 조건의 현재 상태"
|
|
awk 'NR>=95 && NR<=99 {printf " PersistenceJpaRootAutoConfiguration.java:%d %s\n</tspan><tspan x="24" dy="22">", NR, $0}' $P/PersistenceJpaRootAutoConfiguration.java
|
|
awk 'NR>=57 && NR<=64 {printf " JpaPlatformRuntimeAutoConfigura</tspan><tspan x="24" dy="22">tion.java:%d %s\n", NR, $0}' $J/JpaPlatformRuntimeAutoConfiguration.java
|
|
|
|
echo
|
|
echo "# 그 호출자가 검증기를 어디서 얻는</tspan><tspan x="24" dy="22">가"
|
|
cut_range $P/PersistenceJpaRootAutoConfiguration.java PersistenceJpaRootAutoConfiguration.java 106 114
|
|
|
|
echo
|
|
echo "#</tspan><tspan x="24" dy="22"> 이 타입을 빈으로 정의하는 자리와, 그 빈을 주입받는 코드"
|
|
b=$(grep -c '@Bean' $J/JpaPlatformAutoConfiguration.java || tr</tspan><tspan x="24" dy="22">ue)
|
|
echo " JpaPlatformAutoConfiguration 의 @Bean 개수 : $b"
|
|
|
|
awk 'NR==19 || NR==20 {printf " JpaPlatformAutoConfigurat</tspan><tspan x="24" dy="22">ion.java:%d %s\n", NR, $0}' $J/JpaPlatformAutoConfiguration.java
|
|
cut_range $J/JpaPlatformAutoConfiguration.java JpaPlatf</tspan><tspan x="24" dy="22">ormAutoConfiguration.java 48 50
|
|
cut_range $J/JpaPlatformRuntimeAutoConfiguration.java JpaPlatformRuntimeAutoConfiguratio</tspan><tspan x="24" dy="22">n.java 111 117
|
|
hits=$(git grep -n 'JpaDataSourceProfileValidator ' -- 'src/**/*.java' \
|
|
| grep '/main/' \
|
|
| grep -v </tspan><tspan x="24" dy="22">'public JpaDataSourceProfileValidator\|new JpaDataSourceProfileValidator\|final class' \
|
|
| grep -v 'JpaDataSourceProfi</tspan><tspan x="24" dy="22">leValidator validator =' || true)
|
|
if [ -z "$hits" ]; then echo " 파라미터나 필드로 받는 프로덕션 코드 : 0 건"; else ech</tspan><tspan x="24" dy="22">o "$hits" | strip; fi
|
|
|
|
echo
|
|
echo "# HikariPoolConstraintValidator 가 읽는 키와 그 빈, 그리고 풀 크기를 보는 다른 검증기"</tspan><tspan x="24" dy="22">
|
|
grep -n 'static final String .*_KEY = "spring.datasource.hikari' $R/HikariPoolConstraintValidator.java \
|
|
| sed -E 's#</tspan><tspan x="24" dy="22">^([0-9]+): *# HikariPoolConstraintValidator.java:\1 #'
|
|
cut_range $R/RuntimeSafetyConfig.java RuntimeSafetyConfig.java </tspan><tspan x="24" dy="22">49 51
|
|
echo " maximum-pool-size 와 minimum-idle 을 실제로 검사하는 곳 :"
|
|
git grep -n 'spring.datasource.hikari.maximum-p</tspan><tspan x="24" dy="22">ool-size\|spring.datasource.hikari.minimum-idle' -- 'src/**/*.java' | grep '/main/' | strip
|
|
echo " app-bootstrap 이 Hik</tspan><tspan x="24" dy="22">ariCP 를 선언하는 구성 :"
|
|
grep -n 'com.zaxxer:HikariCP' src/app-bootstrap/build.gradle | sed 's#^# build.gradle:#'
|
|
ec</tspan><tspan x="24" dy="22">ho " 그런데 runtimeClasspath 를 풀어 보면 :"
|
|
(cd src && ./gradlew :app-bootstrap:dependencies --configuration runtimeCl</tspan><tspan x="24" dy="22">asspath --offline -q 2>/dev/null | grep -i 'HikariCP' | head -2 | sed 's#^# #')
|
|
|
|
echo
|
|
echo "# 그 부재를 고정하는 회귀</tspan><tspan x="24" dy="22"> 테스트"
|
|
git grep -n '@DisplayName\|void the\|void an' -- 'src/**/JpaResolvedDataSourceValidationTest.java' | strip
|
|
echo</tspan><tspan x="24" dy="22"> " 그 테스트가 훑는 범위 :"
|
|
awk 'NR>=115 && NR<=119 {printf " JpaResolvedDataSourceValidationTest.java:%d %s\n", NR, $</tspan><tspan x="24" dy="22">0}' $T/JpaResolvedDataSourceValidationTest.java
|
|
echo " 공허한 통과를 막는 단언과 주석 제거 :"
|
|
cut_range $T/JpaResolvedD</tspan><tspan x="24" dy="22">ataSourceValidationTest.java JpaResolvedDataSourceValidationTest.java 47 60
|
|
</tspan></text>
|
|
<text x="24" y="1036" 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="1058" 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-03T12:44:22+00:00 · exit 0</tspan></text>
|
|
<line x1="24" y1="1072" x2="1176" y2="1072" stroke="#30363d"/>
|
|
<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"># 검증기 자바독이 적은 두 결함과 그 상쇄</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"> JpaDataSourceProfileValidator.java:11 * <p>It used to validate a different one. The bounds came from {@code JpaDataSourceSett</tspan><tspan x="24" dy="22">ings}, bound</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"> JpaDataSourceProfileValidator.java:12 * to {@code app.jpa-platform.datasource.*}, while the pool that serves requests is buil</tspan><tspan x="24" dy="22">t from</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"> JpaDataSourceProfileValidator.java:13 * {@code spring.datasource.hikari.*} — one pool with two descriptions, and a validator</tspan><tspan x="24" dy="22"> can pass</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"> JpaDataSourceProfileValidator.java:14 * against the description that is not in use.</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"> JpaDataSourceProfileValidator.java:15 *</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"> JpaDataSourceProfileValidator.java:16 * <p>Worse, the parallel namespace appeared in no shipped YAML and no row of the env-ke</tspan><tspan x="24" dy="22">y registry,</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"> JpaDataSourceProfileValidator.java:17 * so both of its fields were always null and {@code requirePoolBounds} would have throw</tspan><tspan x="24" dy="22">n on every</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"> JpaDataSourceProfileValidator.java:18 * deployment. Nothing called it, so nothing failed. Two defects that cancelled each oth</tspan><tspan x="24" dy="22">er out, and</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"> JpaDataSourceProfileValidator.java:19 * the reason the application started was the second one hiding the first.</tspan></text>
|
|
<text x="24" y="1464" 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="1486" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 그 병렬 네임스페이스가 src 안에 남아 있는 자리</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"> main · NotificationSmtpProviderConfig.java:48 * app.jpa-platform.datasource.*} validated a pool that {@code spring.datasourc</tspan><tspan x="24" dy="22">e.hikari.*} had</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"> main · NotificationSmtpSettings.java:14 * paid for — {@code app.jpa-platform.datasource.*} validated a pool that {@code</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"> main · SmtpProviderRuntimeAssembler.java:40 * already paid for elsewhere — {@code app.jpa-platform.datasource.*} validated </tspan><tspan x="24" dy="22">a pool that {@code</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"> main · JpaDataSourceProfileValidator.java:12 * to {@code app.jpa-platform.datasource.*}, while the pool that serves requests</tspan><tspan x="24" dy="22"> is built from</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"> test · JpaResolvedDataSourceValidationTest.java:22 * <p>{@code JpaDataSourceSettings} bound {@code app.jpa-platform.datasour</tspan><tspan x="24" dy="22">ce.*} while the pool that</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"> test · JpaResolvedDataSourceValidationTest.java:57 .filter(path -> withoutJavaComments(read(path)).contains("app.</tspan><tspan x="24" dy="22">jpa-platform.datasource"))</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"> main · KafkaMessagingAutoConfiguration.java:119 * repository has already paid for in {@code app.jpa-platform.datasource.*}</tspan><tspan x="24" dy="22">, and the</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"> src 밖에서 이 문자열을 쓰는 파일과 줄 수 :</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"> docs/study/postgresql-jpa-walkthrough.ko.md:1</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"> docs/superpowers/plans/2026-08-15-wave2-module-on-path.md:4</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"> docs/superpowers/plans/evidence/2026-08-15-wave2-decisions.md:3</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"> docs/superpowers/specs/2026-08-15-five-adapter-runtime-remediation-review-design.md:1</tspan></text>
|
|
<text x="24" y="1904" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> infra/jpa/postgres/README.md:1</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"> 그중 운영자용 표에 살아 있는 줄 :</tspan></text>
|
|
<text x="24" y="1948" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> infra/jpa/postgres/README.md:18:| `max_connections` | The number `app.jpa-platform.datasource.maximum-pool-size` must be siz</tspan><tspan x="24" dy="22">ed against — across every instance, and allowing for </tspan></text>
|
|
<text x="24" y="1992" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> 설정 파일(yml·yaml·properties)에서 : 0 건</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"> 그중 주석이 아닌 줄 : main 0 건 · test 1 건 (test 쪽은 회귀 테스트의 검색 문자열)</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"> 그것을 바인딩하던 JpaDataSourceSettings 클래스 : 0 건</tspan></text>
|
|
<text x="24" y="2058" 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="2080" 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="2102" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · JpaDataSourceProfileValidator.java:17 * so both of its fields were always null and {@code requirePoolBounds} would ha</tspan><tspan x="24" dy="22">ve thrown on every</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"> test · JpaResolvedDataSourceValidationTest.java:26 * of its fields were always null — and {@code requirePoolBounds} throws </tspan><tspan x="24" dy="22">on a null. Had anything</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"> test · JpaResolvedDataSourceValidationTest.java:29 * <p>Nothing did. {@code validateStable} and {@code requirePoolBounds} we</tspan><tspan x="24" dy="22">re reachable only from</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"></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"># 지금 검증기가 읽는 것과 던지는 것</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"> JpaDataSourceProfileValidator.java:50 public void validateResolved(DataSource dataSource, boolean requirePostgreSql) {</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"> JpaDataSourceProfileValidator.java:51 Objects.requireNonNull(dataSource, "dataSource");</tspan></text>
|
|
<text x="24" y="2322" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaDataSourceProfileValidator.java:52 if (!requirePostgreSql) {</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"> JpaDataSourceProfileValidator.java:53 // Local development runs H2 by design, and PersistenceVendorProdSafetyValidator i</tspan><tspan x="24" dy="22">s what keeps</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"> JpaDataSourceProfileValidator.java:54 // that out of production. Demanding PostgreSQL here as well would refuse every la</tspan><tspan x="24" dy="22">ptop.</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"> JpaDataSourceProfileValidator.java:55 return;</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"> JpaDataSourceProfileValidator.java:56 }</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"> JpaDataSourceProfileValidator.java:57 try (Connection connection = dataSource.getConnection()) {</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"> JpaDataSourceProfileValidator.java:58 versionPolicy.requireStable(connection.getMetaData());</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"> JpaDataSourceProfileValidator.java:59 } catch (SQLException unreachable) {</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"> JpaDataSourceProfileValidator.java:60 throw new IllegalStateException(</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"> JpaDataSourceProfileValidator.java:61 "could not open a connection to validate the datasource: "</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"> JpaDataSourceProfileValidator.java:62 + unreachable.getMessage()</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"> JpaDataSourceProfileValidator.java:63 + ". A context that starts without this check reports healthy and fails on</tspan><tspan x="24" dy="22"> whoever "</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"> JpaDataSourceProfileValidator.java:64 + "sends the first request.",</tspan></text>
|
|
<text x="24" y="2674" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaDataSourceProfileValidator.java:65 unreachable);</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"> JpaDataSourceProfileValidator.java:66 }</tspan></text>
|
|
<text x="24" y="2718" 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="2740" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># validateResolved 를 부르는 자리 전부</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"> main · PersistenceJpaRootAutoConfiguration.java:113 return () -> validator.validateResolved(dataSource, "postgresql".equa</tspan><tspan x="24" dy="22">lsIgnoreCase(vendor));</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"> test · JpaResolvedDataSourceValidationTest.java:82 .validateResolved(pool, true))</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"> test · JpaResolvedDataSourceValidationTest.java:101 assertThatCode(() -> validator.validateResolved(h2, false))</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"> test · JpaResolvedDataSourceValidationTest.java:104 assertThatThrownBy(() -> validator.validateResolved(h2, true))</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"></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"> PersistenceJpaRootAutoConfiguration.java:56 @AutoConfiguration</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"> PersistenceJpaRootAutoConfiguration.java:57 @ConditionalOnProperty(</tspan></text>
|
|
<text x="24" y="2960" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PersistenceJpaRootAutoConfiguration.java:58 prefix = "ca-skeleton.persistence-jpa",</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"> PersistenceJpaRootAutoConfiguration.java:59 name = "enabled",</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"> PersistenceJpaRootAutoConfiguration.java:60 havingValue = "true")</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"> PersistenceJpaRootAutoConfiguration.java:61 @Import({</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"> application.yml:364: enabled: ${APP_PERSISTENCE_JPA_ENABLED:false}</tspan></text>
|
|
<text x="24" y="3070" 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="3092" 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="3114" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PersistenceJpaRootAutoConfiguration.java:95 * {@code @ConditionalOnBean(DataSource.class)} on a plain {@code @Configuration</tspan><tspan x="24" dy="22">} imported by this</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"> PersistenceJpaRootAutoConfiguration.java:96 * root — a condition evaluated during configuration-class parsing, before the </tspan><tspan x="24" dy="22">datasource bean</tspan></text>
|
|
<text x="24" y="3202" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PersistenceJpaRootAutoConfiguration.java:97 * definition is registered. That class therefore drops out silently in the real</tspan><tspan x="24" dy="22"> application,</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"> PersistenceJpaRootAutoConfiguration.java:98 * taking the whole JPA add-on layer with it. Depending on a bean from it would </tspan><tspan x="24" dy="22">make this check</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"> PersistenceJpaRootAutoConfiguration.java:99 * disappear for the same reason the thing it checks disappeared. The condition-</tspan><tspan x="24" dy="22">ordering defect is</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"> JpaPlatformRuntimeAutoConfiguration.java:57 * root, which already carries the master switch, so "is there a datasource" has b</tspan><tspan x="24" dy="22">een answered yes</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"> JpaPlatformRuntimeAutoConfiguration.java:58 * by the time it is parsed. A bean here that needs one takes it as a parameter, a</tspan><tspan x="24" dy="22">nd a missing</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"> JpaPlatformRuntimeAutoConfiguration.java:59 * datasource with the switch on is then a loud failure — which is the outcome th</tspan><tspan x="24" dy="22">at was wanted,</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"> JpaPlatformRuntimeAutoConfiguration.java:60 * rather than the layer vanishing.</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"> JpaPlatformRuntimeAutoConfiguration.java:61 */</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"> JpaPlatformRuntimeAutoConfiguration.java:62 @org.springframework.context.annotation.Configuration(proxyBeanMethods = false)</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"> JpaPlatformRuntimeAutoConfiguration.java:63 @ConditionalOnClass(DataSource.class)</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"> JpaPlatformRuntimeAutoConfiguration.java:64 @ConditionalOnProperty(prefix = "app.jpa-platform", name = "addons-enabled", match</tspan><tspan x="24" dy="22">IfMissing = true)</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"></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"> PersistenceJpaRootAutoConfiguration.java:106 @Bean</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"> PersistenceJpaRootAutoConfiguration.java:107 public InitializingBean jpaResolvedDataSourceCheck(</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"> PersistenceJpaRootAutoConfiguration.java:108 DataSource dataSource, Environment environment) {</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"> PersistenceJpaRootAutoConfiguration.java:109 JpaDataSourceProfileValidator validator =</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"> PersistenceJpaRootAutoConfiguration.java:110 new JpaDataSourceProfileValidator(new PostgreSqlVersionPolicy());</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"> PersistenceJpaRootAutoConfiguration.java:111 String vendor =</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"> PersistenceJpaRootAutoConfiguration.java:112 environment.getProperty(PersistenceVendorSettings.VENDOR_PROPERTY, "postg</tspan><tspan x="24" dy="22">resql").trim();</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"> PersistenceJpaRootAutoConfiguration.java:113 return () -> validator.validateResolved(dataSource, "postgresql".equalsIgnore</tspan><tspan x="24" dy="22">Case(vendor));</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"> PersistenceJpaRootAutoConfiguration.java:114 }</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"></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"># 이 타입을 빈으로 정의하는 자리와, 그 빈을 주입받는 코드</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"> JpaPlatformAutoConfiguration 의 @Bean 개수 : 0</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"> JpaPlatformAutoConfiguration.java:19 * <p>Plain construction rather than Spring auto-configuration. This repository's rule is</tspan><tspan x="24" dy="22"> that</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"> JpaPlatformAutoConfiguration.java:20 * {@code app-bootstrap} owns composition, and an adapter leaf that auto-configured itsel</tspan><tspan x="24" dy="22">f would</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"> JpaPlatformAutoConfiguration.java:48 /** The datasource product, version, and pool validator. */</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"> JpaPlatformAutoConfiguration.java:49 public JpaDataSourceProfileValidator dataSourceProfileValidator() {</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"> JpaPlatformAutoConfiguration.java:50 return new JpaDataSourceProfileValidator(new PostgreSqlVersionPolicy());</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"> JpaPlatformRuntimeAutoConfiguration.java:111 /** The datasource product, version and pool validator. */</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"> JpaPlatformRuntimeAutoConfiguration.java:112 @Bean</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"> JpaPlatformRuntimeAutoConfiguration.java:113 @ConditionalOnMissingBean</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"> JpaPlatformRuntimeAutoConfiguration.java:114 public JpaDataSourceProfileValidator jpaDataSourceProfileValidator(</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"> JpaPlatformRuntimeAutoConfiguration.java:115 JpaPlatformAutoConfiguration composition) {</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"> JpaPlatformRuntimeAutoConfiguration.java:116 return composition.dataSourceProfileValidator();</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"> JpaPlatformRuntimeAutoConfiguration.java:117 }</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"> 파라미터나 필드로 받는 프로덕션 코드 : 0 건</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"></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"># HikariPoolConstraintValidator 가 읽는 키와 그 빈, 그리고 풀 크기를 보는 다른 검증기</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"> HikariPoolConstraintValidator.java:18 static final String CONNECTION_TIMEOUT_KEY = "spring.datasource.hikari.connection-timeo</tspan><tspan x="24" dy="22">ut";</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"> HikariPoolConstraintValidator.java:19 static final String VALIDATION_TIMEOUT_KEY = "spring.datasource.hikari.validation-timeo</tspan><tspan x="24" dy="22">ut";</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"> HikariPoolConstraintValidator.java:20 static final String KEEPALIVE_TIME_KEY = "spring.datasource.hikari.keepalive-time";</tspan></text>
|
|
<text x="24" y="4434" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolConstraintValidator.java:21 static final String MAX_LIFETIME_KEY = "spring.datasource.hikari.max-lifetime";</tspan></text>
|
|
<text x="24" y="4456" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> HikariPoolConstraintValidator.java:22 static final String LEAK_DETECTION_KEY = "spring.datasource.hikari.leak-detection-thres</tspan><tspan x="24" dy="22">hold";</tspan></text>
|
|
<text x="24" y="4500" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RuntimeSafetyConfig.java:49 @Bean</tspan></text>
|
|
<text x="24" y="4522" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RuntimeSafetyConfig.java:50 HikariPoolConstraintValidator hikariPoolConstraintValidator(Environment environment) {</tspan></text>
|
|
<text x="24" y="4544" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> RuntimeSafetyConfig.java:51 return new HikariPoolConstraintValidator(environment);</tspan></text>
|
|
<text x="24" y="4566" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> maximum-pool-size 와 minimum-idle 을 실제로 검사하는 곳 :</tspan></text>
|
|
<text x="24" y="4588" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · RuntimeNumericBoundsValidator.java:22 "spring.datasource.hikari.maximum-pool-size", "APP_DATASOURCE_POOL</tspan><tspan x="24" dy="22">_MAX_SIZE", 1),</tspan></text>
|
|
<text x="24" y="4632" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · RuntimeNumericBoundsValidator.java:26 new Bound("spring.datasource.hikari.minimum-idle", "APP_DATASOURCE_POO</tspan><tspan x="24" dy="22">L_MIN_IDLE", 0),</tspan></text>
|
|
<text x="24" y="4676" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> app-bootstrap 이 HikariCP 를 선언하는 구성 :</tspan></text>
|
|
<text x="24" y="4698" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> build.gradle:140: testImplementation 'com.zaxxer:HikariCP'</tspan></text>
|
|
<text x="24" y="4720" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> 그런데 runtimeClasspath 를 풀어 보면 :</tspan></text>
|
|
<text x="24" y="4742" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> | | | \--- com.zaxxer:HikariCP:7.0.2</tspan></text>
|
|
<text x="24" y="4764" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> +--- com.zaxxer:HikariCP:{strictly 7.0.2} -> 7.0.2 (c)</tspan></text>
|
|
<text x="24" y="4786" 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="4808" 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="4830" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · JpaResolvedDataSourceValidationTest.java:45 @DisplayName("no production code binds the parallel namespace")</tspan></text>
|
|
<text x="24" y="4852" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · JpaResolvedDataSourceValidationTest.java:46 void theParallelNamespaceIsGone() {</tspan></text>
|
|
<text x="24" y="4874" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · JpaResolvedDataSourceValidationTest.java:70 @DisplayName("an unreachable database fails at startup, not at the first</tspan><tspan x="24" dy="22"> query")</tspan></text>
|
|
<text x="24" y="4918" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · JpaResolvedDataSourceValidationTest.java:71 void anUnreachableDatabaseFailsAtStartup() {</tspan></text>
|
|
<text x="24" y="4940" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · JpaResolvedDataSourceValidationTest.java:91 @DisplayName("the product check applies only where PostgreSQL is the sel</tspan><tspan x="24" dy="22">ected vendor")</tspan></text>
|
|
<text x="24" y="4984" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · JpaResolvedDataSourceValidationTest.java:92 void theProductCheckFollowsTheVendorSelector() {</tspan></text>
|
|
<text x="24" y="5006" 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="5028" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:115 private static Stream<Path> productionSources() {</tspan></text>
|
|
<text x="24" y="5050" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:116 Path root = repositoryRoot().resolve("src");</tspan></text>
|
|
<text x="24" y="5072" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:117 return Stream.of("app-bootstrap", "adapter/outbound/persistence-jpa")</tspan></text>
|
|
<text x="24" y="5094" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:118 .map(root::resolve)</tspan></text>
|
|
<text x="24" y="5116" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:119 .filter(Files::isDirectory)</tspan></text>
|
|
<text x="24" y="5138" 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="5160" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:47 List<Path> sources = productionSources().toList();</tspan></text>
|
|
<text x="24" y="5182" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:48 </tspan></text>
|
|
<text x="24" y="5204" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:49 assertThat(sources)</tspan></text>
|
|
<text x="24" y="5226" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:50 .as("a scan that reached no source would report every binding as absent")</tspan></text>
|
|
<text x="24" y="5248" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:51 .isNotEmpty();</tspan></text>
|
|
<text x="24" y="5270" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:52 </tspan></text>
|
|
<text x="24" y="5292" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:53 // Comments are stripped: a sentence recording that the namespace was retired </tspan><tspan x="24" dy="22">is the opposite of</tspan></text>
|
|
<text x="24" y="5336" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:54 // the defect, which was a binder reading a namespace nothing supplied.</tspan></text>
|
|
<text x="24" y="5358" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:55 List<String> offenders =</tspan></text>
|
|
<text x="24" y="5380" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:56 sources.stream()</tspan></text>
|
|
<text x="24" y="5402" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:57 .filter(path -> withoutJavaComments(read(path)).contains("app.jpa-plat</tspan><tspan x="24" dy="22">form.datasource"))</tspan></text>
|
|
<text x="24" y="5446" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:58 .map(path -> path.getFileName().toString())</tspan></text>
|
|
<text x="24" y="5468" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:59 .sorted()</tspan></text>
|
|
<text x="24" y="5490" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> JpaResolvedDataSourceValidationTest.java:60 .toList();</tspan></text>
|
|
</svg>
|