30 内嵌消息实验合同(局部实测;外部 broker/MDB/邮件 NOT_RUN) 入口:examples/javaee-enterprise/webapp/src/main/java/blog/javaee/web/BrokerLabResource.java;配置 deploy/server-messaging.xml;迁移 db/migrations/002-notification-outbox.sql、003-notification-receipt.sql;驱动 scenarios/30-broker-lab.sh。这里的 broker 是 Open Liberty 进程内的持久消息引擎,发送与消费均由未认证的 HTTP 演示入口同步触发;不是网络外部 broker、MDB 或邮件服务。 可复跑前提:JDK 21.0.12.1、Maven wrapper、Open Liberty 26.0.0.5(Jakarta EE 11 Platform 配置)、PostgreSQL 16.15、pgJDBC 42.7.7、psql/curl/jq。按 examples/javaee-enterprise/README.md 在回环端口隔离部署,使用独立 javaee_lab 和真实本机专用口令;新库按 001、002、003 顺序各迁移一次,不在非空库盲目重跑。复制构建好的 WAR 并将 deploy/server-messaging.xml 安装为服务器 server.xml,配置 JAVAEE_WAR、JAVAEE_PORT=9085、JAVAEE_LAB_USER=javaee_lab、JAVAEE_LAB_PASSWORD、JAVAEE_DRIVER_DIR、JAVAEE_REGISTRY_PASSWORD、JAVAEE_DEMO_MODE=true,HTTP 9085 和 JMS 7277 均只允许回环;启动并检查日志。不可把基础 deploy/server.xml 当作消息配置。完成迁移/部署后: cd examples/javaee-enterprise ../hibernate-lab/mvnw -B -ntp -f "$PWD/pom.xml" clean verify JAVAEE_PORT=9085 JAVAEE_DEMO_MODE=true JAVAEE_LAB_USER=javaee_lab JAVAEE_LAB_PASSWORD='<本机真实口令>' bash scenarios/30-broker-lab.sh 正常:创建订单后 SQL 为同一 event ID 的 PENDING|0;重新发送后为 PUBLISHED|0;显式接收后收据为 1。故障:JMS commit 后注入异常时 HTTP 500 且仍 PENDING|0;再次发送 HTTP 200;收据持久化后 JMS rollback 时 HTTP 500、PUBLISHED|1;十次有界尝试内再次接收同 ID,newReceipt=false。旧脚本只打印最后的 receipt_unchanged;修订脚本会再次查询并断言等于 |PUBLISHED|1。2026-10-05 修订脚本 event 9、退出 0 及源码哈希见 writing-plans/javaee-enterprise/verification/20261005T-final-check/;两个 HTTP 500 是预期屏障,不是杀进程。由于发送侧产生两条相同 event ID 的消息,未保存 JMSMessageID,不能断言再次接收的是前一物理消息的重投。验证输出须包含实际 event ID,不要复用别次运行的 5。 原始记录 writing-plans/javaee-enterprise/verification/20261004T-broker-lab/RUN.md:event 5、场景退出码 0、构建/部署 WAR SHA-256 137bedf79212aec318ab0f4778facc4dd14efd13f236431793c7ce96c397e068。另一次独立的停机/重启后同步接收见 receive-after-restart-http-code.txt (200) 与 receive-after-restart.body.txt (eventId 5, newReceipt false),不是 30-broker-lab.sh 内的步骤。复跑时对照自己的源码/WAR、场景 stdout/退出码、服务器日志与收据 SQL;旧摘要不能代替新部署包核验。 FUTURE/NOT_RUN:外部 broker/资源适配器、真实邮件/MDB、进程任意点崩溃、双实例协调及租约。002 只有 PENDING/PUBLISHED,无 lease_until/lease_token/next_attempt_at 或 payload_version;不得编造租约 SQL 或载荷版本验收。规范 Jakarta Messaging 3.1:https://jakarta.ee/specifications/messaging/3.1/jakarta-messaging-spec-3.1;Open Liberty 26.0.0.5 功能:https://openliberty.io/docs/26.0.0.5/reference/feature/messaging-3.1.html。