问题描述
环境:
- Jboss 7.2
- Java 11
- 休眠 5+
我有一个过滤器,每次用户登录时,我都会更新访问时间和子表(User -> UserRol)中的任何角色更改。
我遇到的问题是函数 userSvc.trace() 在每个会话中执行不止一次,并且会引发 OptimisticLockingExcpetion。
是否可以在过滤器中每个会话只执行一次用户更新?
并行任务
10:54:33,091 INFO [stdout] (default task-2) -----------> session_id:Xwoejqbh1qII8g_dy4jAu4Xt4umYfQc0NpIt56gs
10:54:34,267 INFO [stdout] (default task-3) ----------->session_id:Xwoejqbh1qII8g_dy4jAu4Xt4umYfQc0NpIt56gs
10:54:34,269 INFO [stdout] (default task-1) ----------->session_id:Xwoejqbh1qII8g_dy4jAu4Xt4umYfQc0NpIt56gs
过滤
@Override
public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain) throws java.io.IOException {
req.setCharacterEncoding(UTF8);
resp.setCharacterEncoding(UTF8);
HttpServletRequest sReq = (HttpServletRequest) req;
HttpSession session = sReq.getSession(false);
boolean isLoggedIn = (session != null && session.getAttribute(USER) != null);
try {
if (!isLoggedIn) {
User user = usuariSvc.trace(uPrincipal); //uPrincipal loaded with req data
sReq.getSession().setAttribute(USER,user);
} else {
chain.doFilter(req,resp);
}
} catch (Exception e) {
log.error("Error doFilter " + e.getMessage(),e);
}
}
用户服务
@Stateless
public class UserService {
...
public User trace(UserPrincipal uPrincipal) throws AppException {
...
updateRols(usuari,uPrincipal);
em.flush();
...
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)