엔티티에서 숫자를 증가시키는 SLSB가 있습니다. 두 스레드가 동시에 SLSB에 도달하면 두 요청에서 같은 번호를 얻게됩니다.Stateless Session Bean에서 동시성을 피하는 방법은 무엇입니까?
SLSB이
@Stateless(mappedName = "ejb/CustomerManager")
public class CustomerManagerBean implements CustomerManager {
...
public String recoverName(int id) {
Customer customer = (Customer) em.createQuery("from Customer where id = :id").setParameter("id", id).getSingleResult();
int oldValue = customer.getValue();
int newValue = oldValue + 1;
customer.setValue(newValue);
[BP] return customer.getName() + " value=" + customer.getValue();
}
...
}
법인이
@Entity
public class Customer implements Serializable {
@Id
private int id;
private int value;
}
문제를 테스트하기 위해 추출 추출, 나는 SLSB recoverName 방법에 [BP]
표시 줄에 중단 점을 가지고있다. 그런 다음 두 개의 분리 된 브라우저 페이지에서 두 번 전화를 겁니다. 중단 점에서 두 번 호출에 대한 값은 입니다.
세터가 값을 수정하려고 할 때 어떤 종류의 예외를 던져서는 안됩니까?
내가 (모두 시도)를 AS와 DB로 MySQL 또는 Oracle 도움을
감사로 보스 5를 사용하고
당신이를 추가 한 경우 당신은 플러시 시간에 예외를 얻을 것
그것은 완벽하게 작동 :
은 그냥 당신의 엔티티에 다음을 추가! 대단히 감사합니다 !! – Emiliano