2010-07-23 3 views
2

JPA를 지속성 추상화로 사용하는 모듈 식 (플러그인 형) 응용 프로그램을 만들고이 응용 프로그램을 타사에서 확장 할 수 있어야합니다.모듈 응용 프로그램 (JPA)의 단일 지속 단위

이 응용 프로그램과 해당 플러그인을 다른 데이터베이스/JPA 공급자에게 쉽게 옮겨서 타사 공급 업체가 사용 된 JPA 공급자 (또는 데이터베이스 연결)에 대해 알지 못한다면 캐치 할 수 있습니다. 메인 엔티티 영속성 유닛에 저장 될 새로운 엔티티를 정의함으로써 퍼시스턴스 계층을 확장하십시오 (이것은 새로운 모듈을 가리 키기 위해 모든 모듈을 재구성 할 필요없이 데이터베이스를 전환 할 수있게합니다).

JPA에서 이와 비슷한 작업을 수행 할 수 있습니까? 닷넷의 nHibernate (그리고 아마 Hibernate)를 사용하면 쉽게 할 수 있지만, Java EE 환경에 있기 때문에 JPA에 대해 프로그램하는 것을 선호한다.

+0

응용 프로그램 배포를 어떻게 구성 할 계획입니까? 결국 확장과 함께 하나의 단일 EAR 파일을 배포 할 예정입니까, 아니면 메인 애플리케이션 EAR 외부의 클래스 경로에 배치해야하는 별도의 JAR이 될 확장입니까? –

+0

아마 더 쉽게 확장 할 수있는 병이 따로 있습니다. –

답변

1

OSGi, Equinox 및 EclipseLink를 사용하여 재미있게 만들었지 만 사소한 것은 아닙니다. 기본적으로 사용자 정의 번들은 해결 된 모든 번들의 모든 persistence.xml 파일을 가져 와서 EclipseLink 지속성 공급자를 초기화하는 데 사용되는 단일 persistence.xml로 병합합니다. 또한 f.e.를 지정할 수있는 사용자 정의 후크가 있습니다. 개발 및 배포를 위해 별도로 연결 옵션을 사용할 수 있습니다.

단점 : 컨테이너 관리 지속성에 대한 bye-bye는 말하지만 여전히 트랜잭션에 참여할 수 있습니다. 또한 일부 도구는 폭넓게 상호 참조 엔터티 참조에 반응합니다. 또한 새 엔티티가 포함 된 새 번들을 추가하는 경우 사전에 적절한 테이블, 참조, 인덱스 & 인덱스를 사용하여 데이터베이스를 설정해야합니다.

장점 : 컨테이너를 다시 시작하지 않고 새 번들을 놓고 동적으로 작동하는지 확인합니다.

+0

컨테이너를 다시 시작하지 않아도됩니다. 모든 플러그인 엔티티를 고려하는 보편적 인 영속성 단위를 갖고 싶습니다. 아이디어를 가져 주셔서 감사합니다. –

0

또한 모듈 방식 (Netbeans 모듈 시스템 또는 OSGI 컨테이너에서)으로 JPA를 수행하는 방법을 연구 중입니다. 당신이 알고 있어야

한 가지입니다 당신은 당신의 응용 프로그램이 큰 경우 몇 가지 문제가있을 수 있습니다보다 (중앙 지속성 모듈) 중앙, 큰 EntityManagerFactory를 구축해야하는 경우 :

  • 하는 경우 지속성 모듈은 모듈 시작/종료 이벤트에 반응해야하므로 모듈을 추가하거나 제거 할 때 중앙 EntityManagerFactory를 다시 작성해야합니다. 응용 프로그램이 크다면 (많은 클래스), EntityManagerFactory를 재구성하는 것은 느리고 비용이 많이 듭니다.

  • 모듈을 추가/제거했기 때문에 응용 프로그램이 EntityManagerFactory에 대한 참조를 저장하지 않아도됩니다. 응용 프로그램은 매우 수명이 짧은 EntityManager에서 작동하고 항상 EntityManagerFactory를 가져야합니다.

도 모든 JPA-하여 모듈 EntityManagerFactories 구축을보다 플렉시블 수도 있지만, 더 많은 메모리를 필요로 할 수 있고 EntityManagerFactories 모두가 (모든 모듈에 대해 생성 될 때까지 더 많은 컴퓨팅 파워를 차지할 수 있지만 EntityManager의 공장 수도 필요에 따라 중앙 JPA 서비스에서 생성).

OSGI 컨테이너에서 작업하는 경우 Dynamic-JPA (http://www.dynamicjava.org/projects/dynamic-jpa)가 도움이 될 수 있습니다.

관련 문제