2013-05-23 2 views
2
@Entity 
@Table(name="user_details") 
@Cacheable 
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY) 
public class UserDetails {...} 

위 코드는 UserDetails 클래스를 cacheable으로 정의한 것이다. 나는 또한 hibernate.cfg.xml에 두 줄을 추가 :Hibernate second level cacheing - 프로그램이 종료되지 않는다.

<!-- second-level cache --> 
    <property name="cache.use_second_level_cache">true</property> 
    <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> 

을 내 서비스의 주요 방법은 내가 같은되는 UserDetails 다른 세션에서, 객체 두 번에 접근하고있다 : 하나의 SELECT 쿼리를 예상대로

session = sessionFactory.openSession(); 
session.beginTransaction(); 
UserDetails user = new UserDetails(); 
user = (UserDetails)session.get(UserDetails.class, 3); 
logger.info(user); 
session.getTransaction().commit(); 
session.close(); 

Session session2 = sessionFactory.openSession(); 
session2.beginTransaction(); 
UserDetails user2 = new UserDetails(); 
user2 = (UserDetails)session2.get(UserDetails.class, 3); 
logger.info(user2); 
session2.getTransaction().commit(); 
session2.close(); 

내가 얻을 이는 하이버 네이트가 두 번째 레벨 캐시에서 데이터를 가져 오는 것을 의미한다. 또한 콘솔에 내 물건을 잘 인쇄합니다.

하지만 내 프로그램이 끝나지 않습니다. 그것은 거기에 실행에 앉아, Eclipse, 나는 그것을 수동으로 멈춰야 해. 내가 뭔가 잘못하고 있는거야? 감사.

답변

1

무엇이 잘못 되었나요? 많은 시스템 리소스를 유지하는 SessionFactory을 종료하지 않는 것이 좋습니다. 이러한 자원 중 일부는 응용 프로그램을 종료하지 못하게하는 스레드 여야합니다.

+0

고맙습니다. 좋은 하루 되세요. – yovan786