JForum 소스 코드 검토 - ThreadLocal, 사용자별 변수

1802 단어 DAOfreemarker
JForumExecutionContext는 아주 재미있는 클래스입니다!말 그대로 이것은 집행기 또는 운행기 상하문류이다.어이, 말하지 않은 셈이다!클래스 변수를 먼저 봅니다.
private static ThreadLocal userData = new ThreadLocal();
private static Logger logger = Logger.getLogger(JForumExecutionContext.class);
private static Configuration templateConfig;
	
private Connection conn;
private ForumContext forumContext;
private SimpleHash context = new SimpleHash(ObjectWrapper.BEANS_WRAPPER);
private String redirectTo;
private String contentType;
private boolean isCustomContent;

private boolean enableRollback;
 
정적 변수 logger는 더 이상 말하지 않겠습니다.정적 변수templateConfig,freemarker의 고전적인 사용법이므로 더 이상 말하지 않겠습니다.비정상적인 변수는 모두 특정 사용자와 관련이 있다.즉 사용자 A의'redirectTo'와 사용자 B의'redirectTo'값이 다르다는 것이다.context도 사용자와 관련이 있습니다. 사용자 A는 context를 사용할 수 있습니다.put ("userName", "장삼"), 사용자 B는context를 사용할 수 있습니다.put ("userName", "이 4"), 페이지에서 이럴 수 있습니다. 안녕하세요, ${userName}.사용자마다 HttpServletRequest와 HttpServletResponse도 다르기 때문에forumContext도 사용자와 관련이 있습니다.콘텐츠 타입, isCustom Conent, enable Rollback은 모두 특정 사용자와 관련이 있습니다.
 
특히 왜 conn도 사용자와 관련이 있을까요?통상적으로 데이터베이스 연결은 사용자와 관계가 없어야 한다!?관건은 사용자가 끝까지 요청을 하면 사용자 A가 제출해야 하고 사용자 B가 굴러갈 수 있다는 것이다. 이 점을 하려면 사용자 A가 처음에 얻은 conn이 어느 conn인지 기록해야 하며 연결 탱크에서 함부로 conn을 얻을 수 없기 때문에 conn도 사용자와 관련이 있다.만약 당신이 JForum의 많은 DAO 방법을 본다면, 시스템이 JForumExecutionContext를 사용하는 것을 발견할 수 있을 것이다.연결 풀에서 데이터베이스 연결을 가져오는 것이 아니라 getConnection () 입니다.물론 사용자의 요청이 처리되면 JForumExecutionContext를 사용해야 합니다.finish () 를 사용하여 데이터베이스 연결을 해제합니다.
 
'모든 사용자는 자신의 독립된 변수 값을 가지고 있다'.'모든 라인은 자신의 독립된 변수 값을 가지고 있다'는 것을 연상하면 ThreadLocal의 사용법을 떠올릴 것이다.여기 userData는 정적입니다. ThreadLocal API에서 추천하는 수식자입니다.
 
 
 
 

좋은 웹페이지 즐겨찾기