복붙노트

[SPRING] JPA EntityManager 세션 무효화

SPRING

JPA EntityManager 세션 무효화

내가 작업중인 프로젝트는 Hibernate를 프로 바이더로 Spring 2.5 & JPA를 사용한다.

내 DAO 클래스는 JpaDaoSupport를 확장하므로 getJpaTemplate () 메서드를 사용하여 JpaTemplate을 가져옵니다.

백 엔드 데이터베이스는 내 응용 프로그램 또는 타사 응용 프로그램에서 변경할 수 있습니다.

타사 응용 프로그램이 데이터베이스 (주로 구성 데이터 변경)를 변경하면 응용 프로그램 사용자에게 모든 JPA 세션을 무효화하고 새 데이터를 다시로드 (즉, 백그라운드에서 모든 최대 절전 세션을 무효화) 할 수있는 방법을 제공해야합니다. 이것은 내 응용 프로그램의 모든 동시 사용자가 "보아야"합니다.

어떻게해야합니까?

해결법

  1. ==============================

    1.캐시에는 두 가지 레벨이 있습니다.

    캐시에는 두 가지 레벨이 있습니다.

    캐싱과 관련된 고급 문제는 다음과 같습니다.

    귀하의 질문은 여전히 ​​어떻게 든 일반적이며 답변은 당신이 정확히 무엇을하고 있는지에 달려 있습니다.

    저는 많은 업데이트가 최대 절전 모드를 거치지 않고 완료 될 수있는 시스템에서 작업했으며 마지막으로 2 차 캐시를 비활성화했습니다.

    그러나 열려있는 모든 세션을 추적하고, 필요한 경우 모든 열린 세션의 모든 1 차 수준 캐시와 2 차 수준 캐시를 제거 할 수도 있습니다. 당신은 여전히 ​​스스로 동기화를 관리 할 필요가 있지만 그것이 가능할 것이라고 상상합니다.

  2. ==============================

    2.아키텍처 관점에서 볼 때 다른 애플리케이션이 모든 비즈니스 로직을 무시하고 영구 데이터를 수정하도록하는 것은 그리 좋은 생각이 아닙니다. 그것은 응용 프로그램의 발 밑에 땅을 많은 방법으로 불안정하게 만듭니다 :)

    아키텍처 관점에서 볼 때 다른 애플리케이션이 모든 비즈니스 로직을 무시하고 영구 데이터를 수정하도록하는 것은 그리 좋은 생각이 아닙니다. 그것은 응용 프로그램의 발 밑에 땅을 많은 방법으로 불안정하게 만듭니다 :)

    메시지 처리 나 일괄 처리와 같은보다 우아한 방법으로이 다른 시스템과 통합하는 것이 좋은 생각이 아니겠습니까? Spring은 두 가지 모두에 대해 큰 지원을합니다.

  3. from https://stackoverflow.com/questions/2400430/invalidating-jpa-entitymanager-session by cc-by-sa and MIT license