두 개의 JPA 구현을 지원하는 것이 가능하고 권장됩니까?

StackOverflow https://stackoverflow.com/questions/1008499

  •  06-07-2019
  •  | 
  •  

문제

우리는 개발중인 앱이 있으며 두 가지 다른 JPA 구현을 지원하는 것을 고려하고 있습니다.

현재 OpenJPA를 사용하고 있으며 코드가 상당히 잘 테스트되었습니다.

나는 TopLink에서 교환하여 테스트를 실행했으며 많은 실패를 발견했습니다.

JPA가 표준이기 때문에 차이가 없어야한다고 생각할 것입니다!

두 개의 JPA 구현을 지원하기위한 근거는 여러 앱 서버에서 실행할 수 있도록하는 것입니다.

따라서 1 만, 구현과 서버 사이에 일대일 매핑이 있다는 것이 사실입니까? 예를 들어 TopLink를 사용할 수 있습니까?

두 번째 질문은 다양한 실패를 조사하기 전에 JPA 사양에 더해 두 가지 구현을 지원하는 것만 큼 광범위합니까? 코드를 두 가지 모두에서 작동 시키려고 노력해야합니까?

도움이 되었습니까?

해결책

우리는 Toplink Essentials를 사용하고 Eclipselink로 마이그레이션 할 때도 같은 것을 발견했습니다. Eclipselink가 동일한 코드 기반을 기반으로하더라도 많은 곳에서 우리의 코드가 깨졌습니다!

우리는 대부분의 사례가 Toplink Essentials가 JPA 사양 (예 : 기본 쿼리 벡터 등록 목록 등)에 완전히 부착되지 않았기 때문이라는 것을 알았습니다. 나는 Eclipselink와 Hibernate 사이의 이식성이 더 좋지만 아마도 완벽하지 않을 것으로 기대합니다.

어느 시점에서 당신은 아마도 캐싱과 같은 일부 공급 업체 특정 확장을 사용하고 싶을 것입니다. 이러한 이유로 JPA 제공 업체를 선택하고 먼저 JPA 사양에 지정된 기능 만 사용하는 것이 좋습니다. 잠시 후에도 특정 제공 업체에 만족하는 경우,이를 고수하고 공급 업체 특정 기능을 활용하기 시작하십시오.

응용 프로그램 서버 선택이 JPA 옵션을 제한하거나 그 반대도 마찬가지라고 생각하지 않습니다. 적어도 나는 어떤 제한도 모른다.

다른 팁

아니요, 사실이 아닙니다. 응용 프로그램 서버는 JPA 구현을 시행하지 않으며 다양한 응용 프로그램 서버와 함께 OpenJPA를 사용할 수 있어야합니다. 어디에서나 최대 절전 모드를 사용할 수있는 것처럼 다른 JPA 구현을 사용할 수 있습니다. 예, 당신은 일이 제대로되기 전에 완료하기 위해 약간의 항아리 충돌과 문제 해결이있을 수 있습니다 ...

아니요, 두 개 이상의 JPA 구현에 대한 코드를 작동시키는 것은 실용적이지 않습니다. 그러나 구체적인 필요가없는이 운동의 목적은 다소 비현실적입니다. 일반적으로 요구 사항을 가장 잘 충족시키는 JPA 구현을 선택하는 것이 좋습니다. 그러나 다시, 다른 JPA 구현을 상호 교환 할 때 상황을 상상할 수 있습니다 : 고객 요구 사항, 라이센스 제약, 다른 데이터베이스 지원, 다른 플랫폼이 필요할 수 있습니다. 지원 (예 : 모바일, 내장, ...).

일반적으로 JPA 구현은 사양의 첨부입니다. 공급 업체 특정 기능에 대한 종속성을 최소화하려면 응용 프로그램이 휴대용이어야합니다.

그러나 실제로는 구현 사이에 미묘한 차이가있을 수 있으며, 이는 응용 프로그램을 진정으로 교차 JPA로 만드는 것을 어렵게 만듭니다.

내 Opnion에서는 최소한의 변경으로 다른 JPA 구현으로 포팅 할 수 있도록 가능한 한 표준을 고수하는 것이 가장 좋습니다. 특정 상황에서 특정 회사에 대한 애플리케이션을 개발하는 경우 여러 JPA 구현에 대해 테스트하는 것이 적합하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top