2010-08-12 5 views
3

OSGi 컨테이너로 Apache Karaf를 사용하고 있습니다. Karaf는 Maven 저장소에서 번들을 직접 설치할 수있는 URL 래퍼를 가지고 있습니다.하나의 소스에서 여러 번들 설치하기

> install mvn:com.farpost.billing/background-service/2.2-SNAPSHOT 
Bundle ID: 139 

모두 잘 작동합니다. 하지만 주어진 소스에서 여러 묶음을 시작하고 싶습니다. 새 번들이 때때로 생산 서비스를 중단하고 롤백을 원한다면 이는 의미가 있습니다. 반환 이미 번들 ID를 존재에 불과

> install mvn:com.farpost.billing/background-service/2.2-SNAPSHOT 
Bundle ID: 139 
> install mvn:com.farpost.billing/background-service/2.2-SNAPSHOT 
Bundle ID: 139 

둘째 install 호출은 아무것도하지 않습니다은 OSGi으로이 문제는 내가 하나의 소스에서 여러 번들을 생성 할 수있다

> list 
[ 139] [Active  ] [   ] [Started] [ 60] Billing background service (2.2-20100811-1232) 
[ 140] [Resolved ] [   ] [  ] [ 60] Billing background service (2.2-20100809-1127) 
> update 140 
> list 
[ 139] [Active  ] [   ] [Started] [ 60] Billing background service (2.2-20100811-1232) 
[ 140] [Resolved ] [   ] [  ] [ 60] Billing background service (2.2-20100812-1354) 
> start 140 
> stop 139 
> list 
[ 139] [Resolved ] [   ] [  ] [ 60] Billing background service (2.2-20100811-1232) 
[ 140] [Active  ] [   ] [Started] [ 60] Billing background service (2.2-20100812-1354) 
################# 
# suppose we need to rollback here 
################# 
> start 139 
> stop 140 

매우 간단합니다. 그래서 내 질문에, 거기에 하나의 소스 URL에서 여러 번들을 만드는 방법은 무엇입니까?

답변

2

심볼 이름과 버전이 같은 둘 이상의 복사본을 설치할 수 없다는 문제가 발생합니다.

번들이 설치되어있는 한 패키지를 해결하는 데 사용할 수 있기 때문에 설명 할 수있는 시나리오에 두 개의 다른 버전의 동일한 번들을 설치하면 부작용이 생길 수 있습니다. 하나 또는 다른 번들을 사용하기를 원하지만 믹스는 사용하지 않기를 원하기 때문에 시나리오에서는 아마도 원하는 것이 아닐 것입니다.

결국에는 원하는 번들 만 설치하는 것이 좋습니다. 문제가있는 경우 결함있는 번들을 제거하고 이전 버전을 설치하여 롤백하십시오. 번들의 설치 및 업데이트를 자동화하려면 OSGi 용 소프트웨어 프로비저닝 프레임 워크 인 Apache ACE를 살펴보고 이러한 시나리오를 자동화하고 OSGi 시스템을 전반적으로 관리하는 데 도움을줍니다.

2

기능 파일을 사용하여 여러 번들을 한 번에 설치할 수 있습니다. 현재 우리는 약 6-7 번들을 정의하는 기능 파일을 가지고 있습니다. 그 위에 파일에는 다른 6-7이 필요한 기능이 포함되어 있습니다. "마스터"기능을 설치하면 Karaf는 다음 번들을 동시에 설치합니다. 그리고 원할 경우 카라프는 시작할 때 번들을 실행할 수 있습니다.

  1. 는 기능 파일을 만듭니다 :이 작업을 수행하기 위해

    . 기타 기능은 여기에서 찾을 수 있습니다. external source

  2. m2 디렉토리에 어딘가에 기능 파일을 넣으십시오.

  3. Karaf 홈 디렉토리의 org.apache.karaf.features.cfg를 수정하십시오. 방금 만든 features 파일에 mvn URL을 "featuresRepositories"태그에 추가하십시오. 선택적으로 시작시 기능을로드하려면 기능의 이름을 "featuresBoot"에 추가하십시오.

  4. Karaf를 시작한 후에 "features : install name_of_feature"를 입력 할 수 있습니다. 이렇게하면 기능이 시작되고 기능 파일에 정의 된대로 기능이 필요합니다.

그런 다음 list를 입력하여 필요한 모든 번들이 실행 중인지 확인할 수 있습니다. 번들이 변경되거나 새로운 번들이 추가되면 업데이트가 필요하다는 단점이 있습니다.

희망이 도움이됩니다.

1

편집 :이 게시물이 1 년 된 것을 보았습니다! Stackoverflow RSS 피드 내 목록의 맨 위에 넣어!

+1 to Marcel & 토니는 모두 정확합니다.

RESOLVED 상태의 번들은 패키지를 내보내거나 가져 오는 활동입니다 (ACTIVE은 서비스의 활성화가 시작되고 완료되었음을 의미 함). Karaf 기능을 사용해야합니다. 현재 v2.x 플러그인은 각 종속성에 대해 별도의 기능을 생성하고 다소 기발합니다 (우리는 trunk/v3을 시도하지 않았지만 우리는 karaf-features 파일을 배포 버전의 PDF 문서에서 볼 수 있습니다. fixed 인 것처럼 보입니다.)

두 가지 시도가 있습니다.

  1. 팍스 받는다는의 URL 핸들러 명령은 번들이 이미 설치되어 있음을 인식하고 다음 2 번들 기호 이름이
  2. 1과 동일한 것 대부분로 실패했다하더라도 아무에게
  3. 할 것

(최악의) 옵션 1 : 당신은 당신이 maven-를 사용하여 가정, 특히이 문제를 해결하기 위해 정말 필사적 경우

번들 플러그인은 buildnumber-maven-plugin이 번들 구성에 추가 :

<Bundle-SymbolicName>${project.artifactId} ${buildNumber}</Bundle-SymbolicName> 

을 그럼 당신은 개념적으로 번들 버전 이름을 명시 적 스냅 샷 버전 (스냅을 사용하는 단지 저장소 소프트 링크되어 설치하는 경우 최신 타임 스탬프 버전) : 마르셀이 상태로이 옵션을

install mvn:com.farpost.billing/background-service/2.2-20100812-1354 

는, 당신은 ACTIVE 번들에서 서비스를 가져 오는 동안 RESOLVED 번들에 연결된 다른 번들 패키지 수입을 가질 수있다 - 그래서 수준의 불일치는 시스템을 망가뜨릴 것입니다.

(이하 나쁜) 옵션 2 :

약간 더 나은 (및 변경없이 pom.xml 파일에) :

  1. 참고 번들의 정확한 타임 스탬프 버전이
  2. 호출하는 refresh 명령
  3. 롤백하려면 번들을 제거하고 이전에 언급 된 버전을 설치하십시오.

토니 (Tony)가 말한 것처럼이 옵션을 사용하면 모든 번들을 개별적으로 관리 할 수 ​​있습니다.이 번들은 고통스럽고 위험합니다 (무엇과 함께 작동합니까? 이 글은 어디에 쓰여 있습니까?).Karaf 기능과 versions-maven-plugin 플러그인은 훨씬 더 나은 솔루션

(좋은) 옵션 3 것 :

  1. 이 두 번들을 분할; API 번들 및 구현 번들 - 구현 번들 (서비스 및 실제 로직)을 전환하면 서비스 배선 만 패키지 배선에 영향을 미치지 않습니다.
  2. OSGi 버전 관리 체계를 사용하면 maven 버전 관리와 합리적인 시너지 효과를 얻을 수 있습니다 semantic versioning pdf 및 Peter Kriens 게시 negative qualifiers). 스키마가 MAJOR.MINOR.MICO.qualifier인데, 여기에는 버그 수정 이외의 새로운 기능을 추가하지 않는 마이크로 번호
  3. SNAPSHOT은 테스트되지 않은 주제 변경 작업을 수행하면서 개발을 목적으로 만 사용해야합니다. , 이동 대상 (스냅 샷을 사용해야 할 경우 타임 스탬프 버전을 사용하여 실제로 작업 한 버전으로 잠글 수 있습니다 (SNAPSHOT 버전을 사용해야하는 타사 종속성의 경우 versions-maven-plugin lock-snapshots 목표는 여기에서 도움이 될 수 있음)
  4. Karaf 기능을 사용하면 번들 집합을 훨씬 쉽게 관리 할 수 ​​있습니다 (하나의 명령으로 전체 스택을 배포하고 마찬가지로 업그레이드 할 수 있음)
관련 문제