Hibernate 가 OSGi 에 대한 지원 을 추 가 했 습 니 다.
InfoQ 는 Brett Meyer 에 연락 하여 그들 이 어떤 어려움 을 겪 었 는 지, 그리고 특성 이 어떻게 진화 되 었 는 지 알 게 되 었 다. 그 는 Red Hat 의 소프트웨어 엔지니어 이자 Hibernate ORM 의 핵심 개발 자 이다.
InfoQ: Hibernate 가 OSGi 를 지원 하 는 것 은 최근 bug 로 보이 지만 이 요청 은 2008 년 까지 거 슬러 올 라 갈 수 있 습 니 다.당신 은 이 수정 이 어떻게 진행 되 었 는 지 소개 해 줄 수 있 습 니까?
Meyer: 여러 가지 측면 에서 볼 때 이것 은 지역사회 구동 프로젝트 가 얻 은 진전 이다.어떤 사람들의 흥 미 는 특정한 주 제 를 중심 으로 교체 적 인 해결 방안 을 제 공 했 고 이 해결 방안 은 최종 적 으로 최후 의 결과 에 이 르 렀 다.이 일 에 있어 서 나 는 과거 에 하 이 버 네 이 트 가 OSGi 환경 에서 운행 할 수 있 도록 주장 해 왔 다.그래서 2012 년 8 월 에 제 가 이 팀 에 가입 한 후에 이 임 무 는 제 우선 순위 목록 에 있 습 니 다.이 는 지역 사회의 여러 구성원 을 통합 시 켜 시동 을 걸 기 시 작 했 고 전체적인 토론 을 불 러 일 으 켰 다.
InfoQ: 다른 자바 라 이브 러 리 에 비해 Hibernate 에 OSGi 지원 을 추가 하 는 것 이 왜 더 어렵 습 니까?
Meyer: 기본적으로 JPA 에서 ORM 이 실현 하 는 모든 어려움 은 여러 개의 ClassLoader 와 관련된다.실 체 를 검색 하고 분석 하 며 맵 자원, 색인 주석, 등록 / 확장 점 을 사용 하여 실현, 대리, 상태 유지, 캐 시 와 다른 고려 해 야 할 요소 로 인해 이것 은 우울 하고 복잡 한 문제 가 되 었 다.
하 이 버 네 이 트 의 'bundle 가족' (슈퍼 jar (uber - jar) 이 아 닌) 에 넣 고 동적 인 지구 화 유닛 bundle 을 지원 해 야 하기 때문에 일이 더 나 빠 질 수 있 습 니 다.
InfoQ: Hibernate 에서 OSGi 에 대한 지원 을 실현 하 는 데 도움 이 되 는 새로운 기능 이 있 습 니까?
Meyer: Hibernate ORM 4 에서 새로운 이념 이 일 을 더욱 간단하게 할 수 있다.다단 계 시작 (Multi - phased bootstrapping) 은 자원 을 불 러 오고 처리 하기 전에 ClassLoader 와 통합 연결 (hook) 을 쉽게 제공 할 수 있 습 니 다.통합 연결 자체 가 지구 화 유닛 bundle 에 쉽게 짜 인 '확장 점' 을 실현 할 수 있 습 니 다.
그러나 아직도 정적 이 고 반창고 식 복구 와 유사 해서 현재 구조 에서 이런 문제 들 이 더욱 뚜렷 하 다.Hibernate ORM 5 에서 진행 중인 신원 모델 은 우리 의 지원 능력 을 어느 정도 증가 시 킬 것 이다.
InfoQ: Hibernate 라 이브 러 리 는 어떻게 JPA 류 에 대한 인용 을 가 져 옵 니까?
Meyer: 여러 개의 지구 화 유닛, 여러 개의 Hibernate ORM 인 스 턴 스 를 지원 하고 두 가지 버 전이 있 을 수 있 습 니 다. 우 리 는 완전히 피 했 습 니 다
DynamicImport-Package
.Entity Manager Factory (JPA) 나 Session Factory (원생) 를 요청 할 때 Hibernate ORM OSGi 는 Core 에 사용자 정의 ClassLoader 를 제공 합 니 다.이 ClassLoader 는 Hibernate bundle 의 인 스 턴 스 와 "요청 bundle (requesting bundle)" 에 만 관심 을 가지 고 있 습 니 다. 지구 화 유닛 을 포함 한 bundle 입 니 다. 일반적인 방법 에 따라 실 체 는 지구 화 유닛 을 통 해 명확 하 게 표시 할 수도 있 고 스 캔 을 통 해 찾 을 수도 있 습 니 다. "확장 점" 도 찾 을 수 있 습 니 다."인터페이스 구현, 예 를 들 어 Integrator. 모든 것 은 전체 지구 화 유닛 (모든 맵, 실체 및 확장 점) 이 하나의 bundle 에 있어 야 합 니 다. EMF / SF 가 필요 합 니 다."하나의 단원 으로 구 성 된 bundle 이 이상 적 이지 않 습 니 다. 우 리 는 그것 을 향상 시 키 기 위해 노력 하고 있 습 니 다. 또한 여러 개의 Hibernate ORM 인 스 턴 스 와 다 중 버 전에 대해 서 는 아직 완전히 지원 되 지 않 았 습 니 다. 앞에서 언급 한 바 와 같이 Hibernate ORM 4 는 여전히 매우 정적 입 니 다. 이것 은 유감 입 니 다. Hibernate ORM 5 에 대한 보다 동적 인 작업 이 진행 중 입 니 다.。
InfoQ: Hibernate 에 의존 하 는 bundle 을 다시 시작 하고 새로운 종 류 를 정확하게 얻 을 수 있 습 니까?
Meyer: 이론 적 으로 "bundle 요청" ClassLoader 구 조 는 이렇게 할 수 있어 야 합 니 다. 이 기능 은 EMF / SF 의 지속 적 인 bundle 과 연결 되 어 있 기 때문에 재 부팅 이 가능 할 것 입 니 다. 그러나 Hibernate ORM 5 가 되 어야 이러한 동적 특성 을 진정 으로 지원 할 수 있 습 니 다. 특히 우아 하 게 청소 하 는 등 이 있 습 니 다.
InfoQ: OSGi 지원 에 대해 어떻게 테스트 했 습 니까?
Meyer: Arquillian 에서 저 는 통합 / 유닛 테스트 를 만 들 었 습 니 다. Apache Felix 를 용기 로 사 용 했 습 니 다. 이것 은 많은 독특한 도전 을 가 져 왔 습 니 다. 대부분 ClassLoading 과 관련 이 있 습 니 다. 저 는 처음에 ShrinkWrap 이나 Tinybundles 를 사용 하여 실행 할 때 동적 으로 메모리 에 영구적 인 유닛 을 만 들 고 싶 었 습 니 다. 그러나 이 두 가지 방식 으로 인해 Hibernate ORM Core 는 실 체 를 얻 을 수 있 습 니 다.실제 주 해 를 잃 어 버 렸 을 때 (ShrinkWrap 에 InputStream 을 제공 하 는 ClassLoader 와 코어 에서 읽 는 ClassLoader 는 다 릅 니 다). 테스트 가 실 행 될 때 "요청 bundle" 을 다시 썼 을 때 와 같은 다른 문제 도 있 습 니 다.본질 적 으로 전체 용기 의 ClassLoader 를 부 여 했 습 니 다. 이 문 제 를 둘러싸 고 hacky 스타일 의 추악 한 수정 을 도 입 했 습 니 다.
저 는 마지막 으로 세 개의 독립 된 자원 집합 을 만 들 었 습 니 다. test, test Client Bundle 과 test Result.
test
집합 은 실제 Arquillian 테스트 사례 를 포함 합 니 다. testClientBundle
집합 은 지구 화 유닛 과 실제 '유닛 테스트' 를 포함 하고 Hibernate OSGi 서비스 (JPA 와 원생 방식 포함) 를 사 용 했 습 니 다.결 과 를 검증 합 니 다. 모든 실 패 는 OSGi 서비스 참조 에 설 정 됩 니 다. testResult
인터페이스 가 정의 되 어 있 습 니 다. 마지막 으로 최초의 테스트 사례 로 서 비 스 를 검사 합 니 다. ClassLoader 문 제 를 해결 하 는 것 외 에 거의 현실 세계 의 운영 환경 을 구축 하 였 습 니 다. 마지막 으로 이러한 중개 유형의 서비스 구축 방식 은 Aries JPA 테스트 의 작업 방식 과 매우 가깝다 는 것 을 알 게 되 었 습 니 다. 그 전에 저 는 먼저 그것들 을 알 아 봐 야 합 니 다.InfoQ: OSGi 와 결합 하여 Hibernate 를 사용 하 는 방법 에 대해 문서 나 사례 가 있 습 니까?
마 이 어: 시작 으로 가장 좋 은 점 은 개발 자 들 의 지도 입 니 다. 우리 가 지원 하 는 환경, 세부 사항, 경고 설명 을 설명 합 니 다. 또한 튜 토리 얼 (Tutorial) 과 빠 른 시작 (QuickStart) 프로젝트 도 있 습 니 다. 더 자세 한 토론 을 원 하 는 사람 에 게 는 JIRA 에서 OSGi 의 최상 위 임무, 하위 임무, 관련 수요 부터 시작 할 수 있 습 니 다.
지난주 에 발 표 된 하 이 버 네 이 트 4.2.3 석방 판 에 OSGi 의 지원 을 추 가 했 습 니 다. 이 새로운 기능 은 어 떻 습 니까?
영어 링크: Hibernate adds OSGi Support
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.