2013-04-11 2 views
2

의 JPA 사용 차이점 OSGi의 초보자 인 나의 프로젝트는 OSGi 컨테이너 (아파치 펠릭스, 배포 가능한 jar), 지속성 번들 (jpa 사용) 및 다음과 통신하여 개발 및 실행합니다. jpa 프로 바이더 (Hibernate)를 통한 데이터베이스 (MySql).
OSGi에 대한 jp 사양을 읽었으므로 올바르게 이해했다면 OSGI jpa 엔터프라이즈 사양을 구현하는 OSGi에 JPA 공급자를 사용해야합니다. 이 jpa 공급자는 등록 된 지속성 번들을 추적하여 EntityManagerFactory를 만듭니다.OSGi의 유무에 관계없이

그래서 EntityManagerFactory를 만드는 데 직접 (Persistence.createEntityManagerFactory를 ("XX")을)은 JPA 공급자를 사용하거나 레지스트리에서 검색의 차이점이 무엇인지 :

serviceReferences = context.getServiceReferences(
      EntityManagerFactory.class.getName(), 
      String.format("(%s=%s)", 
      EntityManagerFactoryBuilder.JPA_UNIT_NAME, 
      persistenceUnit)); 

내가 사용하고자하지 않을가 어떤 컨테이너 (apache karaf, geronimo, spring dm, ..), OGSi 엔터프라이즈의 구현으로 "org.apache.aries.jpa.api"와 같은 OSGi 컨테이너를 시작하고 시작하는 것으로 충분합니다. jpa spec을 검색하고 내 영속성 단위 이름과 관련된 레지스트리에서 "EntityManagerFactory"서비스 만 검색하거나 HibernatePersistence와 같은 PersistenceProvider를 자신이 등록해야합니다. 내 persistence.xml 파일?

이 주제에 대한 많은 토론이 있습니다. 은 OSGi 서비스 및 서비스에 관한

감사

답변

3

적절한 설치를은 OSGi에 소비하기가 매우 용이하지만 나는 여전히 문제가. 서비스 참조가있는 아주 오래된 스타일의 예제를 보여주고 있습니다. 그 모델에서는 구식 JPA 방식을 사용하는 것이 훨씬 쉽습니다.

그러나 선언적 서비스를 사용하면 서비스 사용이 매우 가볍습니다. 완전하게 준비된 EntityManagerFactory 서비스가 주입된다. 배포자는 Config Admin, 연결 풀, 다른 JPA 공급자 등 모든 종류의 설정을 조정할 수 있습니다. 이는 명확한 관심사입니다.

실제로이 항목의 출처와 구현자는 코드에서 가정이 적어 오류가 발생하기 쉽고 코드 재사용이 적습니다. 원칙적으로, Hibernate와 MYSQL을 사용하는 것은 당신의 코드 대부분과 완전히 무관하다. 그렇습니다. JPA 나 SQL은 실제로 이식성이 매우 뛰어나다는 것을 알고 있습니다. 그러나 차이점을 모르는 많은면이 있습니다. 작업자가 함께 작업 할 책임이있는 것은 결국 배포자입니다.

선언적 서비스 (DS)는 물론 추가 번들이지만 15 년 동안 OSGi를 사용한 후에는 OSGi 개발자가 DS를 사용하지 않는다고 선언하고 있습니다. OSGi가 시작될 때 DS가 프레임 워크에 내장되었을 것입니다. 프로그램 할 수있는 가장 낮은 수준입니다.

관련 문제