2014-09-26 4 views
2

어도비 CQ 용 CQ Blueprints maven archetype을 사용하여 OSGi 번들을 CQ5.6.1에 배포하고 있습니다. 이 아키타 입은 Maven Sling Plugin을 사용하여 번들을 내 컨텐츠 저장소의 설치 디렉토리에 복사하여 배포합니다.
maven 버전 플러그인을 사용하여 빌드 할 때마다 내 번들의 버전 번호를 변경하려고합니다. 따라서 각 배포시 commons-services-1.0.30.jar처럼 새 파일 이름의 번들 jar이 설치됩니다. 내 문제는 현재 최신 버전을 설치하면 commons-services-1.0.29.jar과 같은 이전 번들 버전이 제거되지 않는다는 것입니다.
설치 폴더에 오래된 번들 버전이 쌓이지 않도록하고 싶습니다. 따라서 제 질문은 : 새로운 버전을 설치할 때 이전 버전을 제거/삭제하는 가장 좋은 방법은 무엇입니까?새 버전을 설치할 때 이전 OSGI 번들 버전을 제거하는 방법은 무엇입니까?

답변

1

내 번들 설치 폴더의 내용을 삭제하려면 내 myproject-all 모듈 (CQBlueprints description for the purpose of this module 참조)에 filter.xml을 구성하여 문제를 해결했습니다. 이렇게하면 이전 번들은 새로운 번들이 설치되기 전에 항상 삭제됩니다.

내 설치 폴더의 내용을 삭제하려면 내 filter.xml 파일에 다음 줄을 추가 :

<filter root="/apps/myapp/install"> 
0

특정 번들 버전을 삭제하려면 curl 명령을 사용하십시오.

curl -u admin:admin -daction=uninstall http://localhost:4505/system/console/bundles/"name of bundle" 

편집 : osgi 번들에 적용 할 수 없으므로 제거가 제거되었습니다.

+0

나는 질문은 JCR VersionManager와 아무 상관이 있다고 생각하지 않습니다, 그것은 약이다 JCR 노드 버전이 아닌 OSGi 번들 버전. –

+0

@BertrandDelacretaz 실제로이 번들은 jcr 노드로 설치 될 것이므로 퍼지를 사용하여 제거 할 수 있지만 버전 번호를 얻을 수 없으므로 두 번째 부분이 작동하지 않는다고 생각했습니다. 우리가 할 수있는 일은 특정 간격 후에 실행하도록 스케줄 할 수있는 새로운 스케줄러를 만드는 것입니다. 이 스케줄러에서는 설치 폴더에서 이전 노드를 삭제하고 pattermather를 사용하여 모든 번들의 최신 버전을 유지하거나 분할 함수를 사용하여 버전 번호에서 숫자를 추출합니다. – amitdeol

+0

어떤 방식 으로든 컬 부분이 잘 작동 함 컬을 사용하여 이전 버전을 삭제할 수 있음 – amitdeol

2

설치 폴더에 쌓여있는 번들은 실제로 문제가되지 않습니다.이 공간은 공간 만 사용하지만 CQ가 번들을 검색하고 설치하는 데 사용하는 Apache Sling OSGI 설치 프로그램에서는 무시됩니다. 설치 프로그램은 최신 버전의 번들 (OSGi 버전 헤더 기반) 만 고려하고 이전 버전은 무시합니다.

이전 번들 파일을 정말로 제거하고 싶다면 설치되어있는 JCR 트리 (/ apps 가정)를 따라 가서 발견 한 작은 도구를 만들고 최신 버전을 제외하고 모두 삭제하십시오. . 번들 파일 이름에 일관되게 버전 번호가 포함되어 있으면 올바른 비교기로 이름을 정렬하고 마지막 비교기를 제외하고 모두 제거 할 수 있습니다. 정말 강력하기를 원한다면 번들 메타 데이터를 읽어서 버전 번호를 찾아야합니다.

정기적으로 도구를 자동으로 실행하려면 OSGi EventHook을 등록하여 새 번들이 설치되었을 때를 감지하고 그럴 때 정리 실행을 트리거하십시오.

죄송 합니다만 조금 복잡해 보이지만 남은 번들 파일은 실제로 문제가되지 않습니다.

+0

고맙습니다. 당신의 상세한 답변을 위해. 이전 버전을 제거하는 좀 더 간단한 방법이 있기를 바랬지 만 귀하의 제안은 확실합니다. Apache Sling OSGI 설치 프로그램이 OSGi 버전 헤더를 기반으로 최신 버전을 선택했다는 귀하의 의견은 번들의 파일 이름에 버전 번호가 포함되어 있지 않아도 문제가 해결 될 것이라고 생각하게 만들었지 만, Maven Bundle Plugin을 사용하여 OSGi 헤더에 파일 이름을 유지하면서 파일 이름에서 버전 번호를 제거하는 방법. – raro

+0

모든 버전에서 동일한 파일 이름을 사용하면 제거 문제가 해결되지만 파일을 교체하는 동안 일시적인 문제가 발생할 수 있습니다. 설치 관리자가 파일을 깨끗하게 처리하는지 확실하지 않습니다. 파일 이름을 가지고 놀고 싶다면 번갈아 사용하는 파일 이름 (bundleA, bundleB 그리고 A로 돌아 가기)을 사용하는 것이 가장 좋습니다. 그래서 남은 부분과 일시적인 문제는 하나만 남았을 것입니다. –

+0

개발 빌드에서는 번들의 파일 이름을 변경하지 않습니다. 그들은 항상 동일한 (x.x.x-SNAPSHOT) 릴리스 번호를 포함합니다. 우리는 지금까지 그다지 문제가 없었기 때문에 설치 관리자가 그 상황을 처리 할 수 ​​있다고 생각합니다. – raro