Thứ Ba, 9 tháng 8, 2016

Ứng dụng JPA vào MVC2 kết hợp JavaEE6

Ứng dụng JPA vào MVC2 kết hợp JavaEE6

Mục đích: Chủ đề của bài này đề cập đến việc ứng dụng JPA – Java Persistence API - để thay thế cho DAO và DTO và nâng cấp quá trình xây dựng ứng dụng web sử dụng mô hình thiết kế MVC2 với các chức năng cơ bản kết nối DB sử dụng JavaEE 6. Ở đây, chúng tôi cũng sẽ áp dựng xây dựng mô hình ứng dụng với cách chia module và cung cấp chức năng cho người dùng thông qua BLO – Business Logic Object và BLO sẽ kết nối dữ liệu thông qua Entity sử dụng JPA

Ứng dụng JPA vào MVC2 kết hợp JavaEE6

Mục đích: Chủ đề của bài này đề cập đến việc ứng dụng JPA – Java Persistence API - để thay thế cho DAO và DTO và nâng cấp quá trình xây dựng ứng dụng web sử dụng mô hình thiết kế MVC2 với các chức năng cơ bản kết nối DB sử dụng JavaEE 6. Ở đây, chúng tôi cũng sẽ áp dựng xây dựng mô hình ứng dụng với cách chia module và cung cấp chức năng cho người dùng thông qua BLO – Business Logic Object và BLO sẽ kết nối dữ liệu thông qua Entity sử dụng JPA

Yêu cầu

  • Nắm vững về ngôn ngữ lập trình Java, lập trình thao tác hướng đối tượng
  • Nắm vững các khái niệm về MVC và cách áp dụng mô hình này để xây dựng ứng dụng với JavaEE 5 (tham khảo tại địa chỉ (https://www.facebook.com/TrongKhanh.Kieu/posts/273566586349388) )
  • Nắm vững các khái niệm về MVC2, cách xây dựng ứng dụng mô hình này trên JavaEE6, cách thức chia module và các mô hình business của các chức năng web cơ bản. Đồng thời, đã cài đặt thành công toàn bộ chức năng cơ bản trên mô hình MVC2 + JavaEE6 (tham khảo tại địa chỉ https://www.facebook.com/TrongKhanh.Kieu/posts/264210740618306 )
  • Nắm vững khái niệm về DataSource
  • Nắm vững khái niệm về POJO hay JavaBeans và các luật cài đặt cho nó

Toàn bộ nội dung của bài này là nâng cấp toàn bộ bài tại địa chỉ https://www.facebook.com/TrongKhanh.Kieu/posts/264210740618306 với nội dung chủ yếu là thay thế toàn bộ DAO và DTO thành Entity sử dụng JPA (Java Persistent API) cùng với xây dựng mô hình ứng dụng theo dạng cung cấp chức năng cho người dùng thông qua BLO (Business Login Object).

Một số khái niệm về JPA – Java Persistence API

  • JPA là một trong những đặc tả của ORM – Object Relational Mapping dùng để kết nối DB và mapping dữ liệu lên thành object một cách nhanh chóng nhằm để thay thể cho cơ chế sử dụng JDBC – Java Database Connectivity API
  • JPA là một frame work được cung cấp sử dụng annotation của Java với khái niệm tất cả đều là POJO – Plain Old Java Object – theo nghĩa tất cả mọi thao tác của người lập trình chỉ là một tập tin java class bình thường.
  • JPA hỗ trợ việc persist – đồng bộ - giữa java object hay entity hay POJO với DB
  • JPA thực hiện chuyển đổi dữ liệu trong object thành dữ liệu tương ứng dưới DB và ngược lại một cách nhanh chóng sử dụng annotation cùng với hạn chế coding trong quá trình xây dựng ứng dụng
  • Một số đối tượng cơ bản quan trọng trong JPA
    • Entity Manager Factory: đây là đối tượng dùng để tạo ra instance của Entity Manager
    • Entity Manager: cung cấp API để tương tác với các Entity, quản lý toàn bộ thời gian sống và hoạt động của các entity và đồng bộ dữ liệu cùng với các thao tác về dữ liệu xuống DB
    • Persistence Context: là vùng nhớ được Entity Manager quản lý để chứa các entity
    • Persistence Unit
      • Là tập các class được ánh xạ đến DB
      • Là thông tin cấu hình để hỗ trợ JPA Provider trong việc cung cấp các yêu cầu cần thiết đủ cho Entity Manager hoạt động với tên file là persistence.xml. Tập tin này được đặt tại thư mục META-INF của gói deploy
      • Thông tin cơ bản là phải có datasource để cung cấp cho nó

    • Persistence: là đối tượng mapping trực tiếp các entity trong persistence context với DB
    • Persistence Provider: là các framework hay đối tượng cung cấp cơ chế đồng bộ như Hibernate, Eclipse Link, …
  • Entity
    • Là một persistence Object – một POJO được có khả năng persist đến DB
    • Mô hình entity là 1 – 1 theo nghĩa 1 entity class là một table dưới DB và 1 entity instance là một hàng dữ liệu dưới DB
    • Các instance được tạo bằng từ khóa new từ các entity class. Tuy nhiên, nó chỉ được đồng bộ xuống DB khi các instance này được các Entity Manager quản lý
    • Các thuộc tính trong entity phải được truy cập thông qua các hàm get và set – bắt buộc được xây dựng trong entity class
    • Một số yêu cầu khi cài đặt Entity class
      • Phải implements Serializable
      • Phải sử dụng @Entity
      • Phải có một constructor không tham số
      • Class và các phương thức không được khai báo là final
      • Các thuộc tính phải được khai báo khác public và phải có đầy đủ get và set để truy cập
      • Phải có một thuộc tính làm khóa chính với annotation @Id
  • Entity Manager
    • Làm nhiệm vụ để quản lý việc đồng bộ dữ liệu từ Entity instance xuống DB và lấy dữ liệu từ DB đưa vào các instance thông qua các query
    • Mô hình tổng quát của Entity Manager

    • Một Entity Manager instance cho phép kết nối từ bên ngoài vào DB ở client hay kết nối đến DB cục bộ khi ở ngay trong server
    • Một số phương thức của Entity Manager hỗ trợ trong quá trình xây dựng ứng dụng
      • public void persist (Object entity): Lưu trữ entity vào DB (Insert) và đưa entity instance vào persistence Context
      • public <T> T merge (T entity): đưa một entity đã được quản lý từ bên ngoài persistence context vào lại bên trong
      • public void remove (Object entity): Xóa một dòng dữ liệu dưới DB và đưa entity ra khỏi persistence context và yêu cầu container hủy nó đi
      • find (Entity class, PrimaryKey): tìm kiếm một entity instance từ bộ nhớ hay DB (đem từ DB đổ vào instance) và đưa entity instance này vào Persistence Context
  • Thời gian tồn tại của Entity

  • Truy vấn dữ liệu sử dụng JPQL – Java Persistence Query Language
    • Các bước thực hiện truy vấn lấy entity
      • Tạo Entity Manager
      • Tạo câu lệnh truy vấn JPQL
      • Tạo Query instance
      • Truyền Parameter
      • Thực thi Query
      • Lấy các instance trả về và xử lý
    • Các instance Query đều được tạo từ Entity Manager
    • Có 02 loại query cơ bản thường dùng
      • Static query hay Named Query
        • Các query này được định nghĩa sẵn trong entity sử dụng annotation @NamedQuery và được nạp vào bộ nhớ khi ứng dụng được deploy và cung cấp cho nhiều yêu cầu cùng lúc thông quá việc truyền parameter thực thi mà không cần kiểm tra cú pháp hay nạp lại
        • Để sử dụng câu lệnh này dùng cú pháp gọi hàm createNamedQuery
      • Dynamic Query
        • Query này được nạp tại thời điểm chức năng được gọi, được check cú pháp và nạp vào bộ nhớ và thực thi
        • Để sử dụng câu lệnh này dùng cú pháp gọi hàm createQuery
    • Câu lệnh truy vấn JPQL
      • SELECT aliasName
        FROM EntityClass  aliasName
        WHERE a aliasName.descrip=:paraName
    • Các hàm thường dùng hỗ trợ lấy dữ liệu trả về khi sử dụng truy vấn
      • public List getResultList(): lấy về một tập entities, nếu không tồn tại entity nào thì giá trị null sẽ được trả về
      • public Object getSingleResult(): lấy về duy nhất một entity, nếu không tồn tại thì lỗi NoResultException sẽ được trả về, nếu trả về nhiều hơn một entity thì lỗi NonUniqueResultException được trả về
      • public Query setParameter(String name, Object value): truyền tham số để truy vấn vào câu lệnh để lấy entity theo yêu cầu từ DB hay bộ nhớ

Mô hình tổng quát

  • Mô hình tiếp cận thay thế DAO và DTO với concept Entity

  • Mô hình thực hiện cải tiến trong bài này

Vận dụng các khái niệm trên kết hợp nội dung bài thực hiện MVC + JavaEE 6 (https://www.facebook.com/TrongKhanh.Kieu/posts/264210740618306 ), chúng ta thực hiện nâng cấp ứng dụng

  • Yêu cầu
    • Nắm vững các kiến thức đã nêu trên
    • Tools sử dụng ở đây là Netbeans 8.1, 7.4
    • JDK 8 update 66 hay JDK 7 update 51 – khuyến cáo sử dụng JDK 7 là ổn định nhất
    • Server: Tomcat 8.0.27, 7.0.41
    • DBMS: SQL Server 2005, 2008, 2012, 2014
    • Thư viện hỗ trợ: JSTL 1.1, 1.2.1, 1.2.2; Driver kết nối database SQLServer (sqljdbc4.jar)
  • Các bước thực hiện
    • Copy project MVC2JavaEE6 và đổi thành tên mới MVC2JavaEE6JTA

 

    • Tạo Entity bằng cách nhấn phải chuột trên Source Packages, chọn New, Chọn Other

    • Chọn Persistence, chọn Entity Classes From Databases. Nhấn Next

    • Chọn Data Connection đã thiết lập trong Database Driver

    • Tất cả các bảng đã xuất hiện, chọn các bảng cần thao tác, nhấn nút Add

    • Nhấn Next

    • Nhấn Next tiếp. Check vào 02 ô Fully Qualified Database Table Names và Attributes for Regenerating Tables. Nhấn Finish

    • Code được phát sinh chỉ một tập tin

    • Mở tập tin Registration. Cấu trúc được phát sinh tương tự như các khái niệm đã nêu ra

  

    • Chúng ta mở tập tin persistence.xml trong Configuration Files sẽ thấy được Persistence Unit đang được cung cấp datasource được khai báo trong tập tin context.xml

  • Tạo class RegistrationBLO trong gói của Entity

    • Phát sinh Entity Manager Factory để tương tác với entity Manager trong BLO bằng cách click phải chuột trong BLO, chọn Insert Code

    • Chọn Use Entity Manager

    • Code sẽ được tự động phát sinh

  • Chúng ta thực hiện viết code cho hàm xử lý login bằng cách sử dụng dynamic query trong BLO

    • Cập nhật lại code LoginServlet để loại bỏ DAO

    • Clean and Build, deploy và kiểm tra chạy lại với chức năng Login

    • Chúng ta vừa hoàn tất chức năng Login sử dụng JPA – Entity một cách nhanh chóng và tất cả mọi thứ dễ dàng cho người lập trình vì tất cả mọi thứ sẽ do container và entity manager quản lý
  • Chúng ta tiếp tục cải tiến chức năng Search
    • Bổ sung một NamedQuery – static Query trong entity class

    • Bổ sung BLO với chức năng Search thay thế DAO

    • Cập nhật SearchServlet

    • Cập nhật search.jsp

    • Clean And Build, Deploy và kiểm tra lại chức năng Search

 

  • Chúng ta tiếp tục cải tiến chức năng Delete
    • Cập nhật BLO với chức năng Delete.
    • Lưu ý : bất kỳ thao tác nào làm thay đổi DB cần phải được đặt trong transaction như trong hình khái niệm đã được đề cập

    • Cập nhật DeleteServlet

    • Clean and Build, Deploy và kiểm tra chức năng Delete

  • Tiếp tục cập nhật chức năng Update vào BLO

    • Cập nhật lại UpdateServlet

    • Clean and Build, Deploy và kiểm tra lại chức năng Update

  • Chúng ta hoàn tất chức năng cuối cùng là Insert
    • Cập nhật chức năng Insert vào BLO

 cra

    • Bổ sung cập nhật cho CreateAccountServlet

 

    • Clean And Build, Deploy và test lại chức năng insert

Chúc mừng các quí vị đã việc cải tiến cơ chế cài đặt MVC2 với cách sử dụng JPA hay entity kết hợp với việc tạo BLO. Chúng ta nhận thấy việc sử dụng framework này khả thuận lợi khi xây dựng ứng giúp web site trên nền tảng của JavaEE6. Chúng tôi hy vọng nội dung của bài này giúp ích các quí vị

Rất mong sự góp ý chân thành và chia sẻ của quí vị về vấn đề này. Hẹn gặp lại quý vị ở chủ đề khác

Không có nhận xét nào:

Đăng nhận xét