2014-04-17 8 views
1

새 프로젝트를 만들고 봄 + 최대 절전 모드 관리에 대한 의문점이 있습니다. 우선 제가 많이 읽었으며 자신을 문서화하려했지만 몇 주 후에이 주제에 대해 조금 분실했습니다.최대 절전 모드 세션을 열고 닫는 데 사용할 패턴 (MyFaces 2.2.2 + Spring 4.0.3 + Hibernate 4.3.2)

프로젝트 구성 내 아키텍처는이 구조 다음

  • :

    JSF 콩 -> 외관 층 -> 서비스 레이어 -> DAO 레이어

  • 내 최대 절전 모드는 모든 DAOS를 처리하고 Spring과 완전히 통합됩니다.

  • 전체 데이터 소스 및 최대 절전 모드 구성은 스프링 구성 파일에서 수행되므로 스프링이 모든 것을 관리합니다.
  • 저는 스프링 보안을 사용하여 프로젝트 보안을 처리합니다.

모든 것이 잘 통합되어있는 것처럼 보이지만 최대 절전 모드 세션을 관리하기위한 견고한 솔루션을 찾을 수 없습니다.

첫 번째 방법은 JSF PhaseListeners를 사용하여 OSIV를 사용하는 것이었지만 스프링을 통합하고 서비스 레이어에서 @Transactional 주석을 사용하기 시작했습니다.

여기 내 질문은 :

  • 내가 매번 @Transactional 방법은 개방 된 하이버 네이트 세션을 호출하고 바로 닫혀 생각하십니까? 아니면 내가 틀렸어?

  • @Transactional에서는 렌더링 응답 단계에서 Hibernate의 게으른 인스턴스화가 발생하고 EAGER 페치를하고 싶지 않기 때문에 문제가 발생할 것이라고 확신합니다. 그래서 ...

  • OSIV를 사용해도 안전합니까? 또는 DOS 공격에 실제로 취약합니까?

  • OSIV 패턴보다는 지연 페치 (leazy fetching) 문제를 처리하는 더 좋은 방법이 있습니까? 나는 더 나은 패턴을 놓치고 있다고 확신한다. 주제에 약간의 빛을 던질 수 있는가? 당신은 단지에있는, 내 모든 질문 아키텍처에 대한 기본적 개념이기 때문에

나는 어떤 코드를 게시하지 못했지만, 당신이 내 코드의 나를 이해할 필요가있는 경우 (나는 나 자신을 설명 엉망입니다 알고) 나에게 부탁하면 최대한 빨리 게시하겠습니다.

감사합니다.

답변

1

많은 질문이 있지만 누구나 한 번에 모든 질문에 답변 할 수있을 것으로 기대하지는 않습니다. 질문 1과 2에 대해 최선을 다할 것입니다 :

1) @Transactional을 사용하는 메소드가 bean (즉, 같은 클래스에 직접 존재하지 않음)에서 호출 될 때 Spring은 기존 트랜잭션을 검사하여 무언가를합니다. 이 설정은 구성에 따라 설정되며 (메소드 또는 빈에 대해 다르게 구성 될 수 있음) Transaction Propagation을 참조하십시오.따라서 기존 트랜잭션을 사용하거나 새 트랜잭션을 생성하거나 트랜잭션을 전혀 사용하지 않을 수 있습니다.

2) 프로젝트에서 비 eager 페칭이 문제가되는 것으로 나타났습니다. 확실히 가능하지만 IMHO는 유지하기가 어렵고 실수를위한 추가 공간을 추가합니다. 이 문제는 이전에 논의되었지만 (대답은 다시 가능합니다. 그러나 추가 작업이 필요합니다. 특정 상황에 대해 이점과 노력을 비교해야합니다.) Open Session In View Pattern

+0

감사 인사, 트랜잭션 전파를 살펴 보겠습니다. 최대 절전 세션과 거래에 대해 머리가 엉망이되어 올바르게 일을 잘 수행하는 방법을 찾아야합니다. 또한 [OpenSessionInViewFilter] (http://docs.spring.io/spring/docs/4.0.3.RELEASE/javadoc-api/org/springframework/orm/hibernate4/support/OpenSessionInViewFilter.html)를 발견 했으므로 한 가지 질문을 삭제했습니다. – xmartinez

+0

어쨌든 OSIV에 대해 더 많이 읽으면 그만큼 좋아한다는 말을해야합니다. 그것은 많은 단점을 가지고있는 것 같아요, 그리고 그것은 단지 최대 절전 모드의 게으른 로딩 문제를 해결합니다. 나는 DTO의 접근법을 좋아하지 않는다. 누군가가 이것을 관리하는 방법에 대해 더 많은 아이디어를 가지고 있을지도 모른다. – xmartinez