최대 절전 모드 게으른 해결책. 맞아?
-
16-09-2019 - |
문제
최대 절전 모드에서 게으른 초기화 문제를 해결하기 위해 다음 접근법을 사용하고 있습니다. 그것이 작동하는지 아닌지 알려주세요. 몇 가지 이유로 인해 지속성 계층의 강제에서 트랜스 세이션을 구현해야합니다.
public class CourseDAO {
Session session = null;
public CourseDAO() {
session = HibernateUtil.getSessionFactory().getCurrentSession();
}
public Course findByID(int cid) {
Course crc = null;
Transaction tx = null;
try {
tx = session.beginTransaction();
Query q = session.createQuery(
"from Course as course where course.cid = "+cid+" "
);
crc = (Course) q.uniqueResult();
//note that i am not commiting my transcation here.
//Because If i do that i will not be able to do lazy fetch
}
catch (HibernateException e) {
e.printStackTrace();
tx.rollback();
throw new DataAccessLayerException(e);
}
finally {
return crc;
}
}
}
그리고 필터에서 나는 folling 코드를 사용하고 있습니다.
session = HibernateUtil.getSessionFactory().getCurrentSession();
if(session.isOpen())
session.getTransaction().commit();
이 접근법이 맞습니까? 문제가있을 수 있습니다.
해결책
항상 커밋하거나 롤백 한 다음 항상 세션을 닫아야합니다. 기본적으로, 귀하의 리소스 (거래 및 세션)는 무엇이든간에, 예를 들어, 세션의 경우 적절한 최종 블록 (세션의 경우) 또는 시도 및 캐치 블록 (트랜잭션의 경우) 내부에 배치 할 수 있습니다.
일반적으로, 다른 응용 프로그램 계층에서 자원을 할당하고 출시하는 것은 반포 팬입니다. 아키텍처가 방지 방지를 적용하도록 강요하면 여기에 더 많은 질문이 있습니다 ... 예를 들어, 당신이해야 할 일을 생각해보십시오. " 필터 "세션이 닫힌 경우 ...
제휴하지 않습니다 StackOverflow