Logger component mặc định của Mule quá đơn giản, chỉ bao gồm message cần log, category và level của message đó.
Và với cách bố trí như thế này, các bạn có thể thấy, mỗi khi thêm mới một Logger endpoint trong một Mule Flow, các bạn lại phải configure lại Category của Logger. Sẽ như thế nào, nếu một lúc nào đó mình muốn đổi lại Category cho tất cả các endpoint của Logger? Các bạn cũng hình dung được phải không? Do đó, chuyển phần Category thành một phần của Global Configuration là điều đầu tiên mà mình muốn làm.
Phần thứ hai mà mình muốn thêm vào phần Global Configuration là phần cấu hình cho Correlation Id trong Mule ESB. Các bạn cứ hình dung, vì Mule ESB là một hệ thống Enterprise Service Bus nên sẽ có rất nhiều request từ các hệ thống khác nhau tới nó, Correlation Id giống như một identify để phân biệt request này với request khác. Điều này sẽ giúp chúng ta dễ dàng truy ra được thông tin về các request đang có vấn đề trong trường hợp chúng bị lỗi.
Để thêm Category và Correlation Id vào phần Global Configuration của Huong Dan Java Logger, các bạn hãy mở class ConnectorConfig nằm trong package com.huongdanjava.hdjlogger.config, xoá tất cả nội dung trong phần body của class này rồi thêm những dòng code sau:
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 |
package com.huongdanjava.hdjlogger.config; import org.mule.api.annotations.Configurable; import org.mule.api.annotations.components.Configuration; 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 com.huongdanjava.hdjlogger.constant.Text; @Configuration(friendlyName = "Configuration") public class ConnectorConfig { @Configurable @Placement(group = Text.GENERIC, order = 1) @FriendlyName(Text.CORRELATION_ID) @Default("#[message.rootId]") private String correlationId; @Configurable @Placement(group = Text.GENERIC, order = 2) private String category; public String getCorrelationId() { return correlationId; } public void setCorrelationId(String correlationId) { this.correlationId = correlationId; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } } |
Trong đó, class Text nằm ở package com.huongdanjava.hdjlogger.constant dùng để định nghĩa các giá trị text, có nội dung như sau:
1 2 3 4 5 6 |
package com.huongdanjava.hdjlogger.constant; public class Text { public static final String GENERIC = "Generic"; public static final String CORRELATION_ID = "Correlation Id"; } |
Như các bạn thấy trong đoạn code mà mình vừa thêm, 2 thuộc tính mới đã được thêm và được khai báo với annotation @Configurable. Đây là annotation bắt buộc phải có để đánh dấu những thuộc tính này có thể cấu hình được. Trong 2 thuộc tính mới này, mình cũng sử dụng annotation @Placement để chỉ định vị trí xuất hiện của 2 ô Correlation Id và Category. 2 ô này sẽ nằm trong cùng group là Generic và ô Category sẽ nằm sau ô Correlation Id.
Ở đây, mình còn set thêm giá trị mặc định cho ô Correlation Id sử dụng annotation @Default nữa.
Trên đây là tất cả những gì mình làm cho phần Global Configuration của Huong Dan Java Logger.
Để có thể kiểm tra kết quả, chúng ta phải giải quyết thêm một vấn đề nữa.
Bởi vì code mặc định của Connector, mình đã xoá nên hiện tại code trong class HuongDanJavaLoggerComponentConnector đang bị lỗi:
Để đơn giản, mình sẽ sửa lại để remove những code bị lỗi như sau:
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 |
package com.huongdanjava.hdjlogger; 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 com.huongdanjava.hdjlogger.config.ConnectorConfig; @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; /** * Custom processor * * @param friend Name to be used to generate a greeting message. * @return A greeting message */ @Processor public String greet(String friend) { /* * MESSAGE PROCESSOR CODE GOES HERE */ return config.getCorrelationId(); } public ConnectorConfig getConfig() { return config; } public void setConfig(ConnectorConfig config) { this.config = config; } } |
OK, bây giờ thì các bạn có thể Install or Update connector của chúng ta để xem kết quả rồi: