80: Introduce an explicit Hub-managed JavaFX runtime service

This commit is contained in:
2026-09-02 23:23:16 +02:00
parent 0cb125ca9d
commit ed952fd6b1
23 changed files with 732 additions and 67 deletions
+18 -6
View File
@@ -21,8 +21,8 @@
<h1>Nenjim</h1>
<p class="status"><strong>Implementation status:</strong> Journal format version 1, the immutable Java model,
internal strict parser, read-only <code>JournalService</code> with a Hub-managed process implementation,
passive explicitly refreshed <code>JournalServiceManager</code>, and the first central component Registry
are implemented. Contexts,
passive explicitly refreshed <code>JournalServiceManager</code>, Hub-managed
<code>JavaFxRuntimeService</code>, and the first central component Registry are implemented. Contexts,
resolution, classloading, discovery, runtime loading/removal, downloading, publishing, synchronization,
watching, signatures, permissions, and license filtering remain future work.</p>
@@ -117,6 +117,14 @@ PREFERRED=nenjim:com_r35157_nenjim-hubd-api=1.0.3:'Built together'</code></pre>
<code>.valuetypes</code>, and <code>.exception</code>, while parser, ingestion, chain state, filesystem
loading, and the admin boundary live under <code>.impl.ref</code> without leaking through public
signatures.</p>
<p>All modern JavaFX applications share one JVM-wide toolkit. The Hub constructs one
<code>JavaFxRuntimeServiceImpl</code>, registers it as <code>nenjim.javafx-runtime.service</code>, starts it
through its <code>NenjimProcess</code> view, and injects its lifecycle-free service view into active Mission
Control and Process Manager. All six modern JavaFX implementations require that service in their constructor.
Only service startup calls <code>Platform.startup(...)</code>; task submission never initializes or retries
JavaFX and is rejected until startup succeeds. Startup waits until the JavaFX Application Thread is ready and
sets <code>Platform.setImplicitExit(false)</code>, keeping the shared runtime alive after the last window
closes.</p>
<pre><code>data/nenjim/journals/
└── &lt;artifact-coordinate&gt;/
├── &lt;journal-version&gt;.journal
@@ -146,11 +154,15 @@ PREFERRED=nenjim:com_r35157_nenjim-hubd-api=1.0.3:'Built together'</code></pre>
assembly for <code>data/nenjim/journals</code>, registers <code>nenjim.journal.service</code>, starts Journal
second, and records it only after complete successful loading. Only then does the Hub construct the hardcoded
business component graph in dependency order. A Journal failure therefore stops startup before Ticker,
Evelyn, Burner, Mission Control, the online point, and the blocking wait.</p>
Evelyn, Burner, the JavaFX runtime, Mission Control, Process Manager, the online point, and the blocking
wait.</p>
<p>The Ticker explicitly selects the Raydium EVE/USDT source ID while the hardcoded source remains registered but
inactive. After Registry and Journal, the Hub activates only the existing explicit five-business-process
sequence; it does not start every registered process. Successful process IDs are exposed as immutable ordered
point-in-time snapshots, without implying continued health.</p>
inactive. After Registry and Journal, the Hub activates the explicit Ticker, Production Evelyn, Test Evelyn,
Production IOU Burner, JavaFX runtime service, Mission Control, and Process Manager sequence; it does not
start every registered process. The shared JavaFX runtime is therefore active before either enabled JavaFX
application. Successful process IDs, including <code>nenjim.javafx-runtime.service</code>, are exposed as
immutable ordered point-in-time snapshots without implying continued health. A JavaFX startup failure is
fail-fast and prevents Mission Control and Process Manager from starting.</p>
<p><code>com.r35157.nenjim.hubd.Main</code> remains only the outer Java bootstrap. It constructs the reference Hub
through the public <code>NenjimHub</code> interface and calls <code>start()</code> once. The Hub is neither a
component nor a process and is not registered inside its own Registry.</p>