刘光辉
昨天 bb638871a7fb692d80f1b7a758f991dc0879002c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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);
        }
    }
}