package jnpf.limsService.support; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; /** Source-level wiring probe for the transaction-bound water sampling message. */ public class LimsWaterSamplingMessageWiringChecks { public static void main(String[] args) throws Exception { String service = read("jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/impl/" + "LimsSxtQuyangJihuaRenwuServiceImpl.java"); int generated = service.indexOf("renwuMapper.markGenerated("); int published = service.indexOf("eventPublisher.publishEvent(new LimsWaterSamplingMessageEvent("); require(generated >= 0 && published > generated, "message event must be published after the task is marked generated"); String listener = read("jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/listener/" + "LimsWaterSamplingMessageListener.java"); require(listener.contains("TransactionPhase.AFTER_COMMIT"), "listener must run after commit"); require(listener.contains("LimsRecipientRef.role(event.getSamplingRoleId())"), "sampling role must be resolved explicitly as ROLE"); require(listener.contains("LimsMessageEvent.WATER_SAMPLING_DUE"), "fixed event code is required"); String ledger = read("jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/impl/" + "LimsMessageLedgerService.java"); require(ledger.contains("Propagation.REQUIRES_NEW"), "after-commit message ledger must use an independent transaction"); } private static String read(String path) throws Exception { Path root = Paths.get(System.getProperty("user.dir")); return new String(Files.readAllBytes(root.resolve(path)), StandardCharsets.UTF_8); } private static void require(boolean value, String message) { if (!value) { throw new AssertionError(message); } } }