Sử dụng JPA trong ứng dụng Mule ESB

Trong bài viết trước, mình đã giới thiệu với các bạn về Database Connector để kết nối và thao tác với nhiều loại database trong ứng dụng Mule ESB. Bất tiện khi sử dụng Database Connector này là chúng ta phải sử dụng Native Query, mỗi loại database thì chúng ta phải có câu query có cú pháp phù hợp với loại database đó. Để giải quyết vấn đề này, chúng ta có thể sử dụng JPA specification với implementation của Hibernate trong ứng dụng Mule ESB của chúng ta thông qua Mule JPA module. Cụ thể như thế nào? Trong bài viết này, mình sẽ hướng dẫn các bạn.

Đầu tiên, các bạn cần cài đặt Mule JPA module vào Anypoint Studio trước nhé! Xem hướng dẫn ở bài viết này.

Bây giờ, mình sẽ tạo mới một Mule project để làm ví dụ:

Sử dụng JPA trong ứng dụng Mule ESB

Mule Flow của chúng ta sẽ có nội dung như sau:

Sử dụng JPA trong ứng dụng Mule ESB

Trong đó:

  • HTTP Listener Connector Endpoint: dùng để tạo 1 request URL cho client có thể request tới ứng dụng Mule ESB của chúng ta và lấy tất cả thông tin của những sinh viên có tên được truyền trong request parameter.
  • Java Peristence API Endpoint: dùng để kết nối và thao tác với database.
  • Object to JSON Transformer Endpoint: transformer này dùng để convert kết quả từ database sang chuỗi JSON và trả kết quả về cho client.

Endpoint Object to JSON Transformer chúng ta không cần phải cấu hình gì cả.


Cấu hình HTTP Listener Connector

HTTP Listener Connector được cấu hình như sau:

Sử dụng JPA trong ứng dụng Mule ESB

General Settings:

Sử dụng JPA trong ứng dụng Mule ESB

Bạn nào chưa biết cách cấu hình HTTP Listener Connector thì có thể tham khảo bài viết này nhé!

Request URL trong ví dụ này sẽ có dạng như sau:

http://localhost:8081/jpa/student?name=Khanh


Cấu hình Java Persistence API

Trước khi đi vào phần cấu hình cho Mule JPA module, chúng ta cần chuẩn bị một số thứ trước đã.

  • Đầu tiên là định nghĩa database structure để lưu thông tin của sinh viên và định nghĩa entity cho nó.

Để đơn giản, trong ví dụ này, mình chỉ định nghĩa một table chứa thông tin sinh viên với 2 cột như sau:

Entity của table student có nội dung như sau:

  • Tiếp theo, để làm việc với JPA với implementation của Hibernate, chúng ta cần thêm dependencies của chúng.

Các bạn hãy mở tập tin pom.xml và thêm những dependencies sau:

Hibernate

MySQL Connector

Lúc này, các bạn sẽ thấy trong Referenced Libraries có 2 phiên bản của thư viện Hibernate JPA API: 2.0 và 2.1.

Sử dụng JPA trong ứng dụng Mule ESB

Phiên bản 2.0 được include bởi mule-module-jpa library còn 2.1 thì được include bởi Hibernate. Để tránh bị conflict, các bạn nên exclude một phiên bản đi. Ở đây, mình sẽ exclude phiên bản 2.0 từ thư viện mule-module-jpa:

  • Để làm việc với JPA, chúng ta cần phải có tập tin cấu hình cho nó.

Các bạn hãy tạo mới tập tin persistence.xml nằm trong thư mục /src/main/resources/META-INF

Nội dung của tập tin này có thể là như sau:

Tuỳ nhu cầu của các bạn, hãy chỉnh sửa cho phù hợp.

  • Bước cuối cùng của việc chuẩn bị đó là chúng ta sẽ khai báo đối tượng EntityManagerFactory trong Spring container.

Đây là bước nhất định phải có vì xí nữa, các bạn sẽ dùng nó để cấu hình nó cho Mule JPA module.

Ở đây, mình tạo mới tập tin spring.xml nằm trong thư mục /src/main/resources và khai báo đối tượng EntityManagerFactory như sau:

Và đưa nó vào tập tin Mule Flow mule-esb-jpa.xml của chúng ta:

OK, vậy là chúng ta đã hoàn thành việc chuẩn bị rồi đó các bạn, giờ sẽ là lúc chúng ta cấu hình cho Mule JPA module thôi!

Phần cấu hình của Mule JPA module có nội dung như sau:

Sử dụng JPA trong ứng dụng Mule ESB

Như các bạn thấy, ở đây chúng ta có 2 phần cần phải cấu hình cho Mule JPA module:

  • Thứ nhất là phần Config Reference.

Phần này nếu các bạn nhấp vào dấu cộng ở bên cạnh drop-down menu, các bạn sẽ thấy cửa sổ sau:

Sử dụng JPA trong ứng dụng Mule ESB

 

Ở đây, các bạn có thể thấy, chúng ta cần cấu hình Entity Manager Factory Reference, đây chính là cấu hình trỏ tới đối tượng EntityManagerFactory mà chúng ta đã khai báo nó trong Spring container đó các bạn. Các bạn hãy điền vào id của đối tượng EntityManagerFactory như sau:

Sử dụng JPA trong ứng dụng Mule ESB

  • Phần thứ hai chính là phần cấu hình Operation mà chúng ta muốn thực thi.

Ở đây, chúng ta có các Operation như sau:

Sử dụng JPA trong ứng dụng Mule ESB

Trong ví dụ này, mình sẽ chọn Operation là Query. Lúc này, phần General của mình sẽ như sau:

Sử dụng JPA trong ứng dụng Mule ESB

Chúng ta có nhiều field để cấu hình:

  • Criteria Reference
  • Named Query
  • Statement
  • Query Parameters Reference.

Ở đây, mình sẽ khai báo trực tiếp câu SQL trong phần ô Statement để tìm tất cả những sinh viên theo tên sinh viên:

Trong ô Query Parameters Reference, chúng ta sẽ cấu hình một đối tượng Map object chứa một key “name” và phần value sẽ là tên sinh viên mà chúng ta muốn tìm. Cấu hình của mình như sau:

Sử dụng JPA trong ứng dụng Mule ESB

Ở đây, mình lấy request parameter từ inboundProperties của Mule Message luôn. Nó là một đối tượng Map nên mình không cần phải chuyển đổi gì cả.

OK, vậy là mình đã hoàn thành việc cấu hình cho Mule Flow của mình.

Giả sử database có nội dung như sau:

Sử dụng JPA trong ứng dụng Mule ESB

Thì khi chạy ví dụ của chúng ta, kết quả sẽ như sau:

Sử dụng JPA trong ứng dụng Mule ESB
Một lưu ý là để ứng dụng của chúng ta khi chạy có thể kết nối tới MySQL database hoặc một hệ thống database nào khác, các bạn phải copy JDBC Driver dependency của nó vào thư mục mule/lib/boot trong thư mục cài đặt của Mule Runtime Server. Nếu các bạn chạy trên Anypoint Studio thì có thể trong phần Run Configuration của ứng dụng, chọn tab Classpath, chọn Bootstrap Entries rồi chọn Add External JARs…, chọn đến file .jar của JDBC Driver dependency.

Của mình như sau:

Sử dụng JPA trong ứng dụng Mule ESB

Add Comment