Sau khi người dùng đã cấu hình Huong Dan Java Logger xong, việc xử lý để lấy ra giá trị cuối cùng của Correlation Id và Category là việc cần thiết. Vì trong phần Global Configuration, giá trị của 2 ô này là bắt buộc nên đây sẽ là những giá trị mặc định cho 2 thông tin này.
Vì phần Global Configuration Override trong phần cấu hình chính có thể override lại giá trị của Correlation Id và Category nên chúng ta cần kiểm tra phần này trước, nếu chúng không được cấu hình thì chúng ta mới trả về giá trị mặc định.
Cụ thể code để lấy Correlation Id và Category từ cấu hình như sau:
1 2 3 4 5 6 7 |
private String getCorrelationId(ConnectorConfig cc, String globalCorrelationIdOverride) { if (!StringUtils.isEmpty(globalCorrelationIdOverride)) { return globalCorrelationIdOverride; } return cc.getCorrelationId(); } |
1 2 3 4 5 6 7 |
private String getCategory(ConnectorConfig cc, String globalCategoryOverride) { if (!StringUtils.isEmpty(globalCategoryOverride)) { return globalCategoryOverride; } return cc.getCategory(); } |
Phần Category thì giá trị của nó là cố định nên chúng ta không cần hỗ trợ Mule Expression Language (MEL) cho nó, nhưng phần Correlation Id thì bắt buộc phải có nha các bạn, bởi vì giá trị của Correlation Id có thể lấy từ Mule Flow hoặc Mule Message như phần giá trị mặc định trong Global Configuration của thông tin này.
Mình sẽ thêm phương thức sau để giúp chúng ta có thể lấy được giá trị cuối cùng sau khi đã xử lý MEL:
1 2 3 4 5 |
private String evaluateMEL(MuleEvent event, String text) { ExpressionManager em = event.getMuleContext().getExpressionManager(); return em.parse(text, event); } |
Trong Mule ESB thì đối tượng ExpressionManager là đối tượng sẽ đảm nhận việc parse MEL để lấy giá trị cuối cùng mà chúng ta cần.
Tới đây thì mình sẽ sửa lại phương thức getCorrelationId để hỗ trợ MEL và sẵn tiện đổi tên phương thức này thành getEvaluatedCorrelationId luôn:
1 2 3 4 5 6 7 |
private String getEvaluatedCorrelationId(MuleEvent event, ConnectorConfig cc, String globalCorrelationIdOverride) { if (!StringUtils.isEmpty(globalCorrelationIdOverride)) { return evaluateMEL(event, globalCorrelationIdOverride); } return evaluateMEL(event, cc.getCorrelationId()); } |
Đến đây thì chúng ta có thể lấy được Correlation Id và Category trong phần chính của Processor rồi:
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
package com.huongdanjava.hdjlogger; import org.apache.commons.lang3.StringUtils; import org.mule.api.MuleEvent; import org.mule.api.annotations.Category; import org.mule.api.annotations.Config; import org.mule.api.annotations.Connector; import org.mule.api.annotations.Processor; import org.mule.api.annotations.display.FriendlyName; import org.mule.api.annotations.display.Placement; import org.mule.api.annotations.param.Default; import org.mule.api.annotations.param.Optional; import org.mule.api.expression.ExpressionManager; import com.huongdanjava.hdjlogger.config.ConnectorConfig; import com.huongdanjava.hdjlogger.constant.LoggingLevel; import com.huongdanjava.hdjlogger.constant.Text; @Connector(name="huong-dan-java-logger-component", friendlyName="Huong Dan Java Logger") @Category(name = "org.mule.tooling.category.core", description = "Components") public class HuongDanJavaLoggerComponentConnector { @Config ConnectorConfig config; @Processor public String log( @Placement(group = Text.GENERIC, order = 1) @Optional String message, @Placement(group = Text.GENERIC, order = 2) @Default("INFO") @FriendlyName(Text.LEVEL) LoggingLevel loggingLevel, @Placement(group = Text.OVERRIDE, order = 1) @Optional @FriendlyName(Text.OVVERIDE_CORRELATION_ID) String globalCorrelationIdOverride, @Placement(group = Text.OVERRIDE, order = 2) @Optional @FriendlyName(Text.OVVERIDE_CATEGORY) String globalCategoryOverride, MuleEvent event) { String category = getCategory(config, globalCategoryOverride); String correlationId = getEvaluatedCorrelationId(event, config, globalCorrelationIdOverride); return config.getCorrelationId(); } private String getEvaluatedCorrelationId(MuleEvent event, ConnectorConfig cc, String globalCorrelationIdOverride) { if (!StringUtils.isEmpty(globalCorrelationIdOverride)) { return evaluateMEL(event, globalCorrelationIdOverride); } return evaluateMEL(event, cc.getCorrelationId()); } private String getCategory(ConnectorConfig cc, String globalCategoryOverride) { if (!StringUtils.isEmpty(globalCategoryOverride)) { return globalCategoryOverride; } return cc.getCategory(); } private String evaluateMEL(MuleEvent event, String text) { ExpressionManager em = event.getMuleContext().getExpressionManager(); return em.parse(text, event); } public ConnectorConfig getConfig() { return config; } public void setConfig(ConnectorConfig config) { this.config = config; } } |