我有一个 SLSB,它增加实体中的数字。如果两个线程同时到达 SLSB,我会在两个请求中得到相同的数字。
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;
}
为了测试这个问题,我[BP]
在 SLSB recoverName 方法中用 标记的行设置了一个断点。然后从两个分开的浏览器页面进行两次调用。在断点处,两个调用的值相同。
当第二个调用尝试使用 setter 修改值时,不应该抛出某种异常吗?
我使用 JBoss 5 作为 AS,使用 MySql 或 Oracle 作为 DB(两者都试过)
谢谢您的帮助