Thành phần phạm vi phiên được đồng bộ hóa theo mặc định. Điều đó có nghĩa, Seam chỉ quan tâm đến một yêu cầu tại một thời điểm có thể truy cập vào một thành phần như vậy. Tất cả các yêu cầu khác phải đợi cho đến khi yêu cầu đầu tiên kết thúc. Để ngăn chặn nạn đói, các yêu cầu chờ đợi có thời gian chờ (xem org.jboss.seam.core.SynchronizationInterceptor
để thực hiện tương ứng). Khi yêu cầu chờ không nhận được quyền truy cập vào thành phần cho đến khi hết thời gian chờ, SynchronizationInterceptor
sẽ ném một số org.jboss.seam.core.LockTimeoutException
.
Giả sử các yêu cầu, A và B, cần thành phần importUser
và A của bạn trước tiên. Nếu A mất một thời gian dài để hoàn thành, B sẽ kết thúc trong LockTimeoutException
. Để tìm nguyên nhân gây ra sự cố của bạn, hãy tìm hiểu cách yêu cầu importUser
có thể mất nhiều thời gian hơn thời gian chờ đã xác định.
Câu trả lời hay (+1) –
@Arthur Cảm ơn bạn! – kraftan
Điều này không xảy ra vì có một lệnh chạy dài, nhưng có vẻ bề mặt khi có một ngoại lệ được ném ra khỏi phương pháp này và bạn đang cố gắng truy cập lại cùng một chức năng. – Joe