2008-09-16 4 views
6

EJB 2.x 엔티티 bean (BMP)을 사용하는 대형 응용 프로그램이 있습니다. 이것은 끔찍한 끈기 전략으로 잘 알려져 있습니다 (필요한 경우 자세히 설명 할 수 있습니다).EJB 2.x BMP 엔티티 bean을 Hibernate 3.x와 혼합하기

이 애플리케이션을 훨씬 표현적이고 투명하며 비침 입적 인 지속성 전략을 사용하기 위해 마이그레이션하고 싶습니다. 회사의 이전 경험을 고려할 때 Hibernate 3.x가 확실한 선택입니다.

응용 프로그램의 100 개가 넘는 테이블이 엔티티 bean을 사용하기 때문에 Hibernate 로의 마이그레이션이 오래 걸릴 것입니다. 그래서 저는 두 가지 퍼시스턴스 전략이 가능한 한 동시에 같은 테이블에서 동시에 실행되는 단계별 접근 방식을 검토하고 있습니다.

제 질문은이 두 가지 지속 전략을 결합 할 때의 함정은 무엇입니까? 그들은 서로의 방식으로 얻을 것인가?

답변

2

Hibernate에서 2 차 캐싱을 사용하고 Hibernate 외부에서 테이블이 수정되면 Hibernate는 해당 캐시 항목이 부실하다는 것을 알 수 없으므로 캐스팅에주의를 기울여야한다.

트랜잭션의 경우 컨테이너에서 제공하는 JTA를 사용해야하므로 안전해야합니다.

+0

첫 번째 레벨 캐시 (세션)에도 동일하게 적용됩니다. –

+0

긴 세션을 사용할 경우 예. 그러나 그것은 정말로 권고되지 않았습니다. –

+0

지금까지의 제한된 실험을 바탕으로 두 기술은 직접 JDBC의 세 번째 기술과 함께 행복하게 나란히 작동합니다. 동일한 트랜잭션 내에서 3 가지 모드가 사용되는 경우에도 앱 서버의 TransactionManager는 실제로 원하는 동작을 제공합니다. –

2

나는 Hibernate 세션으로 작업하는 것이 정말 조심스럽게 생각한다. 최대 절전 모드 캐시 물건, 그리고 그 길을 얻을 수도 있습니다.

나는 당신이 최대 절전 모드를 채택한다면 Entity Bean을 완전히 삭제할 것을 권장한다. 당신의 Hibernate는 Session Bean 내에서 작동하고 Session Bean이 당신의 트랜잭션을 관리하게한다.

Java Persistence API로 표준화 된 Hibernate 인 EJB 3을 번갈아 사용하십시오.

+0

Hibernate를 프로 바이더로 JPA에 대해 실제로 프로그래밍 할 예정이지만, 100 개의 BMP 엔터티 빈을 즉시 마이그레이션 할 수 없기 때문에 두 기술을 동시에 실행하는 것에 관한 질문이 남아 있습니다. –

관련 문제