Transaction Management trong Java là gì

1540
17-09-2024
Transaction Management trong Java là gì

Trong bài viết này Bizfly Cloud sẽ cùng tìm hiểu về Transaction Management trong Java với các ví dụ minh họa. Trước khi đi sâu vào Transaction Management, chúng ta cần hiểu giao dịch là gì và vai trò của nó trong lập trình Java.

Trong bài hướng dẫn này, chúng ta sẽ thảo luận về Transaction Management trong Java bằng cách sử dụng các ví dụ. Nhưng trước khi chuyển sang Transaction Management, chúng ta nên biết giao dịch là gì. Do đó, sau đây là một số điểm quan trọng về giao dịch để hiểu rõ hơn:

  • Giao dịch là một đoạn thực thi chương trình truy cập và có thể thay đổi các phần dữ liệu khác nhau.
  • Một cơ sở dữ liệu nhất quán phải hiển thị đối với một giao dịch.
  • Cơ sở dữ liệu có thể tạm thời không khả dụng trong quá trình thực thi giao dịch không nhất quán.
  • Cơ sở dữ liệu được cập nhật sau khi giao dịch được hoàn thành thành công (được cam kết) và phải được giữ nguyên.
  • Các sửa đổi của giao dịch đối với cơ sở dữ liệu được hoàn thiện khi nó được cam kết.
  • Nhiều giao dịch có thể chạy đồng thời.

Có hai thách thức chính cần giải quyết:

  • Nhiều loại lỗi, bao gồm sự cố phần cứng và sự cố hệ thống.
  • Việc thực thi nhiều giao dịch diễn ra đồng thời.

Các Loại Giao Dịch

Mọi truy vấn SQL sẽ được coi là một giao dịch trong JDBC. Kết nối cơ sở dữ liệu được tạo bằng JDBC sẽ hoạt động ở chế độ tự động cam kết (giá trị tự động cam kết là TRUE). Câu lệnh SQL sẽ tự động được cam kết khi thực thi.

Đôi khi, chúng ta có thể muốn cam kết giao dịch sau khi một vài câu lệnh SQL khác đã được thực thi. Biến tự động cam kết phải được thay đổi thành False tại thời điểm đó. Nó ngăn dữ liệu bị cam kết trước khi tất cả các truy vấn đã được chạy. Nếu một ngoại lệ giao dịch xảy ra, chúng ta có thể khôi phục () các sửa đổi và khôi phục trạng thái ban đầu. Sử dụng các đặc điểm ACID, Transaction Management có thể được mô tả đúng cách.

Transaction Management trong Java là gì

Transaction Management trong Java là gì

Thuộc Tính ACID

Giao dịch là một đoạn thực thi chương trình truy cập và có thể thay đổi các phần dữ liệu khác nhau. Hệ thống cơ sở dữ liệu phải đảm bảo những điều sau đây để bảo vệ tính toàn vẹn dữ liệu:

Tính nguyên tử: Hoặc tất cả các hoạt động của giao dịch được thể hiện chính xác trong cơ sở dữ liệu hoặc không có hoạt động nào trong số đó. Thành phần Transaction Management giữ cho nó được cập nhật.

Tính nhất quán: Tính nhất quán của cơ sở dữ liệu được duy trì khi một giao dịch được thực hiện riêng biệt. Nó thuộc thẩm quyền của lập trình viên ứng dụng.

Tính cô lập: Một giao dịch phải không biết về bất kỳ giao dịch nào khác đang chạy đồng thời, mặc dù nhiều giao dịch có thể thực thi đồng thời. Các giao dịch khác được thực hiện đồng thời không được xem kết quả của các giao dịch trung gian. Nói cách khác, đối với mỗi cặp giao dịch Ti và Tj, Ti nhận thấy rằng Tj đã hoàn thành việc thực thi trước khi Ti bắt đầu hoặc Tj bắt đầu thực thi sau khi Ti đã hoàn thành. Trình quản lý kiểm soát đồng thời kiểm soát nó.

Tính bền vững: Khi một giao dịch diễn ra thành công, các sửa đổi được thực hiện ngay cả khi có sự cố hệ thống và các bản cập nhật cho cơ sở dữ liệu vẫn tiếp tục. Đó là nhiệm vụ của bạn để làm như vậy với tư cách là điều phối viên phục hồi chức năng.

Ví Dụ Về Giao Dịch

Ví dụ:

Giao dịch chuyển $50 từ tài khoản A sang tài khoản B:

1.read(A)

2. A:= A – 20

3.write(A)

4.read(B)

5. B := B + 20

6.write(B)

Yêu cầu về tính nguyên tử – Nếu giao dịch không thành công sau bước ba, nhưng trước bước sáu, hệ thống phải đảm bảo rằng cơ sở dữ liệu chưa được cập nhật. Kết quả là, sẽ có một sự không nhất quán.

Yêu cầu về tính nhất quán – Điều kiện để nhất quán là khi giao dịch hoàn tất, tổng của A và B không thay đổi.

Yêu cầu về tính cô lập – Nếu một giao dịch khác được phép truy cập cơ sở dữ liệu được sửa đổi một phần từ bước ba đến bước sáu, nó sẽ gặp phải cơ sở dữ liệu không nhất quán (tổng của A và B sẽ thấp hơn mức cần thiết). Bằng cách xử lý các giao dịch theo tuần tự hoặc cái này sau cái kia, tính cô lập có thể được đảm bảo một cách nhanh chóng.

Yêu cầu về tính bền vững – Các thay đổi cơ sở dữ liệu do giao dịch thực hiện phải chịu được lỗi cho đến khi người dùng được thông báo rằng giao dịch đã hoàn tất (tức là $20 đã được chuyển).

Trạng Thái Giao Dịch

Đang hoạt động: Đang hoạt động là trạng thái bắt đầu; nó được duy trì trong khi giao dịch đang được thực thi.

  • Cam kết một phần: Sau khi câu lệnh cuối cùng đã được hoàn thành, giao dịch được cam kết một phần.
  • Không thành công: sau khi nhận ra rằng việc thực hiện thông thường là không còn khả thi.
  • Đã hủy bỏ: giao dịch bị hủy bỏ và cơ sở dữ liệu được trả về trạng thái trước khi giao dịch được bắt đầu.

Sau khi bị hủy bỏ, có hai tùy chọn:

Khởi động lại giao dịch chỉ có thể thực hiện được nếu không có lỗi logic nội bộ.

  • Kết thúc: Kết thúc giao dịch.
  • Đã cam kết: Sau khi hoàn thành thành công, đã cam kết.

Vai Trò Trong Transaction Management

Ba vai trò hàng đầu trong Transaction Management được liệt kê bên dưới. Như sau:

  • Cam kết: Chúng tôi muốn thực hiện các thay đổi trong Cơ sở dữ liệu vĩnh viễn sau khi các câu lệnh SQL đã được thực thi. Việc gọi hàm commit () là cần thiết. Cam kết thường đề cập đến việc thực hiện các thay đổi vĩnh viễn đối với cơ sở dữ liệu. Các sửa đổi không thể bị đảo ngược hoặc thu hồi. Tuy nhiên, chúng tôi có khả năng sửa đổi dữ liệu cơ sở dữ liệu.
  • Khôi phục: Khôi phục đảo ngược tất cả các sửa đổi cho đến khi cam kết gần đây nhất hoặc điểm lưu đã chỉ định. Đôi khi chúng tôi có thể muốn đảo ngược các sửa đổi. Ví dụ: trong một truy vấn lồng nhau duy nhất, một phần đã được chạy đúng cách trong khi phần còn lại đã tạo ra lỗi. Nếu một ngoại lệ đã xảy ra tại thời điểm đó và chúng tôi muốn đảo ngược các sửa đổi do phần đầu tiên thực hiện, chúng tôi nên sử dụng hàm Rollback().
  • Điểm lưu: Điểm lưu cho phép tạo các điểm kiểm tra trong giao dịch và cho phép khôi phục về một điểm lưu cụ thể. Khi một giao dịch được cam kết hoặc khôi phục, tất cả các điểm lưu được tạo cho giao dịch đó sẽ ngay lập tức bị xóa và trở nên vô dụng.

Kỹ Thuật Transaction Management

Năm kỹ thuật để Transaction Management được cung cấp bởi giao diện kết nối. Đó là:

1. Phương thức setAutoCommit()

Cài đặt AutoCommit được đặt thành TRUE theo mặc định. Câu lệnh SQL sẽ tự động được cam kết khi thực thi. Chúng ta có thể đặt giá trị thành AutoCommit bằng cách sử dụng hàm setAutoCommit().

2. Phương thức Commit()

Dữ liệu được cam kết bằng phương thức cam kết. Cam kết là thuật ngữ được sử dụng sau khi truy vấn SQL đã được thực thi (). Các sửa đổi được thực hiện bởi câu lệnh SQL sẽ được cam kết.

Cú pháp:

3. Phương thức Rollback()

Cho đến lần cam kết cuối cùng, các sửa đổi có thể được hoàn tác bằng quy trình khôi phục. Khi các câu lệnh SQL đang được thực thi, nếu có sự cố hoặc ngoại lệ. Giao dịch có thể được khôi phục().

Cú pháp:

4. Phương thức setSavepoint()

Bạn có nhiều quyền kiểm soát hơn đối với giao dịch, nhờ có Savepoint. Bạn có thể sử dụng hàm rollback() để hoàn tác bất kỳ thay đổi nào được thực hiện cho đến hoặc sau điểm lưu khi bạn thiết lập điểm lưu trong giao dịch (tập hợp các câu lệnh SQL) (). Có thể tạo điểm lưu mới bằng cách sử dụng hàm setSavepoint().

5. Phương thức releaseSavepoint()

Điểm lưu được tạo bị xóa bằng cách sử dụng nó.

Chương Trình Minh Họa

import java.io.*; import java.util.*; import java.sql.*; class TransactionManagement { public static void main(String[] args) throws Exception { Connection connection = null; Statement statement = null; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/user", "root", "123456"); connection.setAutoCommit(false); statement = connection.createStatement(); statement.executeUpdate("insert person values ('1','USA','JACK')"); connection.commit(); System.out.println("Transaction committed Successfully."); statement.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); connection.rollback(); } } }
SHARE