Tôi cố lưu kết quả của quy trình đăng nhập để thống kê cơ sở dữ liệu không đồng bộ để tiết kiệm thời gian trong phương thức đăng nhập. Nhưng bằng cách nào đó, quá trình đăng nhập mất nhiều thời gian hơn nếu tôi thêm một thread.sleep vào phương thức async. Tại sao vậy? Tôi nghĩ rằng phương pháp xác thực sẽ không chờ đợi cho các writeResultToStats methode để kết thúc.Phương thức gọi Không đồng bộ trong EJB
@Stateless
@LocalBean
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@TransactionManagement(TransactionManagementType.CONTAINER)
public class CustomerBeanTest {
@PersistenceContext(unitName = WebPersistenceUnits.QISADS)
private EntityManager em_local;
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public void authenticate(Long loginid, String cmppassword) {
try {
Login l = em_local.find(Login.class, loginid);
String s = l.getPassword();
if (!s.equalsIgnoreCase(cmppassword))
throw new PasswordMissmatchException();
writeResultToStats(loginid, true);
} catch (PasswordMissmatchException e) {
writeResultToStats(loginid, false);
}
}
@Asynchronous
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
private void writeResultToStats(Long loginID, boolean success) {
try { // just for testing
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
LogUtils log = new LogUtils(this);
Login l = em_local.find(Login.class, loginID);
if (success) {
l.setSuccessLast(new Date());
l.setSuccessCount(l.getSuccessCount()+1);
log.log(Level.INFO, "Update Login Stat Success [%d, %s, %d]", l.getId(), l.getName(), Thread.currentThread().getId());
} else {
l.setFailureLast(new Date());
l.setFailureCount(l.getFailureCount()+1);
log.log(Level.INFO, "Update Login Stat Fail [%d, %s, %d]", l.getId(), l.getName(), Thread.currentThread().getId());
}
}
}
Tôi nghĩ rằng bạn cần phải thoát ra khỏi phương pháp không đồng bộ vào ejb khác. Vì nó bây giờ, nó sẽ chỉ được xử lý như một phương pháp gọi địa phương –
Hãy để tôi thử điều này và lấy lại cho bạn –
Nó hoạt động. Cảm ơn. –