总而言之,我有一个代码可以在数据存储中写入一些内容,并且在我调用检索刚刚写入数据存储的数据后立即进行操作。我的第二个电话总是失败!但是,如果我再次拨打电话,它可以正常工作并找到数据!真的是连线!代码在 1.7.1 上运行良好,这在我升级到 1.7.2 后开始发生(不能 100% 确定,因为我同时还做了一些其他更改,但我想我也提到了) . 这是我编写数据的代码:
PersistenceManager pm = PMF.get().getPersistenceManager();
pm.evictAll();
Key userKey = KeyFactory.createKey(User.class.getSimpleName(), request.getUsername());
try {
User user = pm.getObjectById(User.class,userKey);
if (!user.getPassword().equals(request.getPassword())){
ret.setCode(ResultInfo.WRONG_PASSWORD);
}else{
ret.setCode(ResultInfo.FINE);
UUID sid = UUID.randomUUID();
ret.setCredit(user.getCredit());
ret.setSid(sid.toString());
ret.setUsername(user.getUsername());
ret.setName(user.getName());
user.setSid(sid.toString());
user.setLastLogin(new Date());
}
} catch (Exception e) {
ret.setCode(ResultInfo.USER_NOT_FOUND);
}finally{
pm.flush();
pm.close();
}
这是读取数据的代码:
PersistenceManager pm = PMF.get().getPersistenceManager();
pm.evictAll();
try {
User user = getUserForSession(pm, sid);
if (user==null){
ret.setCode(ResultInfo.SESSION_NOT_FOUND);
}else{
ret.setCode(ResultInfo.FINE);
ret.setCredit(user.getCredit());
ret.setSid(sid.toString());
ret.setUsername(user.getUsername());
ret.setName(user.getName());
if (user.getGid()!=null){
Game game = getGameByGameId(pm, user.getGid());
ret.populateGameResult(user,game);
}
}
} catch (Exception e) {
ret.setCode(ResultInfo.USER_NOT_FOUND);
} finally{
pm.flush();
pm.close();
}
getUserForSession 只需使用以下代码来检索用户:
static public User getUserForSession(PersistenceManager pm,String sid){
Query q = pm.newQuery(User.class);
q.setFilter("sid == sidParam");
q.declareParameters("String sidParam");
try {
List<User> users = (List<User>) q.execute(sid);
if (users.size()!=1){
return null;
}else{
return users.get(0);
}
} catch (Exception e) {
return null;
} finally {
}
}
当我在这个函数中调试时,列表的大小在第一次调用时为零,在下次调用时为 1,参数完全相同!结果,我总是在第一次调用时收到 SESSION_NOT_FOUND 错误,而在第二次调用时,我得到了我想要的数据!
第二个代码段由 Ajax 调用,所以现在我已经更改了代码以检查错误并再次调用!我不喜欢它,我想知道如何解决这个问题。这是我的 Ajax 代码:
function fetchUserInfo(){
var sid = getCookie("sid");
var urlStr = BURL + '/game/' + sid + "/gameInfo";
$.ajax({
type:'POST',
url: urlStr,
dataType: 'json',
data: null,
contentType: "application/json; charset=utf-8",
success: function(data) {
console.debug(data);
if (data.code == "OK"){
try{
$("#client_name").html(data.name);
$("#client_credit").html(data.credit);
}catch(e){
}
}else{
fetchUserInfo();
}
},
error: function(data){
alert("Error");
}
});
}
任何帮助/指针表示赞赏
阿米尔