2010-11-23 4 views
4

내 문제와 관련하여 stackoverflow에서 다른 많은 질문을 읽었지만 적절한 해결책을 찾지 못했습니다.OSGI 응용 프로그램에서 EntityManager를 제공하는 모범 사례

OSGI 응용 프로그램 (Equinox)을 개발하고 JPA (EclipseLink)를 사용합니다. 이제는 필요한 번들에 EntityManager를 가져 오는 가장 좋은 방법을 묻습니다. EntityManagerFactory를 서비스로 게시하고이를 사용하여 EntityManger를 얻으면 EntityManager를 사용하는 모든 번들에 persistence.xml을 제공해야합니다. EntityManger의 한 인스턴스를 공유하는 utitlity 클래스를 작성하고이를 서비스로 게시하면 스레드 동기화 문제가 발생할 우려가 있습니다.

OSGI 및 JPA를 사용할 때 EntityManager를 제공하는 모범 사례가 있습니까?

감사

답변

1

당신이있는 persistence.xml을가 추가로 볼 수 있습니다 번들 선언해야하는 persistence.xml을가 위치한 번들의 MANIFEST.MF에. EclipseLink는이 선언을 검색하고이 번들의 클래스 로더를 사용하여 persistence.xml을 가져온다. 그런 다음 EntityManagerFactory를 서비스로 게시 할 수 있으며 서비스를 사용하는 모든 번들에서 persistence.xml을 공유 할 필요가 없습니다. 그러나 이것은 EclipseLink에서만 작동한다고 생각합니다.

0

나는이 persistence.xml에 대해 알고있는 각 클라이언트 번들 않고는 OpenJPA 별도의 모델 번들 설치를 얻을 수 this blog을 사용했다. EclipseLink는 JPA 제공자이므로 거의 동일한 설정이어야합니다. 블로그 하단에 링크되어있는 example code을 확인하십시오. "JPA-PersistenceUnits을 :을 myPersistenceUnit"은 OSGi 내에서 사용하는 경우는 EclipseLink에서