cuốn sách gpt4 ai đã làm

Làm cách nào để buộc các bản ghi mới được lưu vào cơ sở dữ liệu *ngay lập tức*?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 07:48:48 29 4
mua khóa gpt4 Nike

Tôi đang phát triển ứng dụng Java/Seam/Hibernate/Glassfish với hai luồng:

  • Chủ đề số 1 Gửi nhiều tin nhắn khác nhau và viết thông tin tóm tắt vào cơ sở dữ liệu MySQL.
  • Chủ đề số 2 Định kỳ thăm dò cơ sở dữ liệu (bằng cách Dịch vụ thực thi theo lịch trình Called) và hoạt động theo "trạng thái" hiện tại của mỗi tin nhắn.

Gặp phải vấn đề kiểm tra tích hợp:Chủ đề số 2 Chờ đợiChủ đề số 1 Việc thêm hàng mới dường như không thành vấn đề, chỉ là hàng mới không được thêm trong quá trình thử nghiệm nên lệnh gọi dự kiến ​​đã không được thực hiện. Chắc chắn rồi, sau khi thử nghiệm thất bại, một dòng mới hiện lên - nhưng đã quá muộn. Không chắc đây có phải là vấn đề thiết kế hay không - Chủ đề số 2 hiện đang được sử dụng Lifecycle.beginCall()...Lifecycle.endCall() Lấy bối cảnh Seam. Vì vậy, sự hiểu biết của tôi (có thể sai) có thể là vấn đề là do hai luồng có hai phiên Hibernate riêng biệt - vì vậy một lần đọc không biết thông tin mới nhất của một lần viết?

Có thể có nhiều cách khác nhau để giải quyết vấn đề này, nhưng ý tưởng hiện tại của tôi là khi tôi gọi cứu()/tuôn ra() Ngay cả khi thực hiện giao dịch theo cách thủ công, tôi không thể buộc Hibernate thực sự thêm bản ghi vào bảng ngay lập tức phải không? Không gặp may mắn với những điều này - khiến tôi tự hỏi liệu có loại giao dịch được quản lý nào đó đang được sử dụng ở hậu trường hay không. Cảm ơn vì lời khuyên nào...

Để biết thông tin, đây là ý chính của mã để thêm bản ghi:

// Lấy phiên Hibernate
Phiên phiên = (Phiên) Component.getInstance("hibernateSession");

//Tạo yêu cầu
Yêu cầu newRequest = Yêu cầu mới();
// newRequest.set();

// Lưu yêu cầu mới vào cơ sở dữ liệu
session.save(newRequest);

// Đã thử session.flush(), giao dịch.commit(), v.v. tại đây.
// Dường như không có gì đưa bản ghi vào cơ sở dữ liệu ngay lập tức.

Không chắc điều này có liên quan hay không, nhưng đây là cấu hình Hibernate:

đúng
after_statement
org.hibernate.transaction.SunONETransactionManagerLookup
org.hibernate.transaction.JTATransactionFactory
jta

(Vì đây là ứng dụng hiện có do khách hàng sở hữu nên tôi không có quyền thay đổi cấu hình Hibernate.)

câu trả lời hay nhất

Suy đoán của bạn là tốt.

bạn đang sử dụngNhà máy giao dịch JTA, do đó giao dịch được chia cho JTA (tức là vùng chứa).

để tiết kiệm Lời yêu cầu Phương thức (ở đây tôi giả sử nó được định nghĩa trong EJB) cần được chú thích bằng các chú thích giao dịch:@TransactionAttribution(TransactionAttributionType.REQUIRES_NEW), vì vậy khi phương thức kết thúc, giao dịch sẽ được thực hiện.

Làm cách nào để buộc các bản ghi mới được lưu vào cơ sở dữ liệu *ngay lập tức*? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/14853837/

29 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress