Kiến trúc Hibernate.

Một phần của tài liệu ĐỒ ÁN MÔN HỌC PHÁT TRIỂN PHẦN MỀM CHUYÊN NGHIỆP HỆ THỐNG HỖ TRỢ TƯƠNG TÁC THẦY TRÒ (Trang 112)

Trong phần này, nhóm tác giả sẽ trình bày tổng quan về kiến trúc Hibernate dựa trên sơ đồ dưới đây.

Sơ đồ 1: Kiến trúc Hibernate

Người phát triển ứng dụng sẽ không phải tương tác trực tiếp với cơ sở dữ liệu thông quan việc tao kết nối sử dụng JDBC, JNDI hay JTA, sau đó sử dụng các câu lệnh SQL để truy vấn dữ liệu nữa. Thay vào đó, tất cả các hoạt động này đều được Hibernate đóng gói trong các Session và Transaction, chính là các thành phần sẽ được thao tác trực tiếp bởi ứng dụng. Để giải thích cụ thể cho quá trình tương tác này, chúng ta hãy cùng xem xét một ví dụ về việc ứng dụng lưu một thực thể từ dang đối tượng, xuống cơ sở dữ liệu thông qua JDBC như thế

nào. Đầu tiên, ứng dụng sẽ tao một lớp thực thể, chứa các thuộc tính của thực thể đó, và các phương thức Get, Set cho chúng. Bên cạnh đó, để Hibernate có thể hiểu được làm thể nào ánh xạ lớp thực thể này sang bảng quan hệ tương ứng, người phát triển cần cung cấp các metadata thông qua file đặc tả XML hoặc khai báo trực tiếp vào lớp đối tượng sử dụng Annotation trong java. Các khai báo này bao gồm việc ánh xạ từ các thuộc tính của đối tượng sang các cột trong bảng dữ liệu quan hệ, thuộc tính nào là thuộc tính khóa, và quan hệ của lớp đối tượng này với các lớp đối tượng khác, nếu có.

Sau khi đã xây dựng xong lớp thực thể và đặc tả tương ứng, việc tiếp theo ứng dựng cần làm là khởi tạo đối tượng cho lớp thực thể. Đối tượng này sẽ ở trạng thái “Transient” khi mới được khởi tạo. Tiếp theo đó, ứng dụng sẽ mở Session và bắt đầu một transaction để thực hiện việc truyền đối tượng xuống cơ sở dữ liệu. Sau khi Transaction hoàn thành việc này, đối tượng sẽ chuyến sang trạng thái “Persisten”, nghĩa là dữ liệu của nó đã được lưu dưới dạng bảng trong cơ sở dữ liệu quan hệ. Cuối cùng, ứng dụng cần đóng lại Session mà nó vừa nó. Sau thao tác này, trạng thái của đối tượng sẽ chuyển từ “Persisten” thành “Detached”.

Trong phần trên, nhóm tác giả đã giới thiệu ở mức đơn giản về kiến trúc của Hibernate thông qua quá trình xây dựng lớp thực thể, và lữu trữ các đối tượng của nó xuống cơ sở dữ liệu. Tuy nhiên, nhưng giới thiệu này chỉ mang đến cho người đọc một cách nhìn khá trừu tượng về kiến trúc Hibernate. Một biểu diễn cụ thể, thực tế hơn sẽ được trình bày trong phần tiếp theo đây.

 Lớp SessionFactory (org.hibernate.SessionFactory): Đối tượng của lớp này sẽ được gọi mỗi khi ứng dụng cần mở một session mới.

 Lớp Session (org.hibernate.Session): Biểu diễn giao tiếp giữa ứng dụng và cơ sở dữ liệu. Lớp này đóng gói kết nối JDBC – Java.sql.connection đồng thời là nhà máy cho các transction. Bên cạnh đấy, đối tượng này cũng lưu trữ một danh sách các đối tượng thực thể đang ở trang thái “persistent”.

 Persistent Object: Các đối tượng này chứa trạng thái persistent và các chứng năng của ứng dụng, và có thể được biểu diễn dưới dạng JavaBeans hay POJOS. Chúng được liên kết chính xác với một đối tượng session; do đó, ngay sau khi session được đóng, chúng sẽ chuyển sang trạng thái “Detached” và có thể được sử dụng tự do bởi ứng dụng.

 Transaction (Org.hibernate.Transaction): Một transaction bao gồm một tập các thao tác có liên quan mật thiết của ứng dụng tới cơ sở dữ liệu. Nó trừu tượng hóa các transaction tại JDBC, JTA hay CORBA. Một session có thể bao gồm nhiều transaction trong khi nó được mở.

 ConnectionProvider (org.hibernate.connection.ConnectionProvider): Một nhà máy cho các kết nối JDBC. Nó giúp ứng dụng loại bỏ tính phức tạp của việc sử dụng các DataSource và các DriverManager bên dưới.

 TransactionFactory (org.hibernate.transactoinFactory): Một nhà máy cho các đối tượng transaction.

Một phần của tài liệu ĐỒ ÁN MÔN HỌC PHÁT TRIỂN PHẦN MỀM CHUYÊN NGHIỆP HỆ THỐNG HỖ TRỢ TƯƠNG TÁC THẦY TRÒ (Trang 112)