2012-09-11 3 views
1

일반 Java 응용 프로그램 내에서 여러 Equinox 인스턴스를 실행하려고합니다.여러 Equinox OSGi 프레임 워크 실행

현재 내가 사용하여 내 응용 프로그램에서 춘분의 한 인스턴스를 시작하고있다 :

EclipseStarter.startup(new String[]{"-console", "-dev", "bin"}, null); 

을하지만, 중지 및 업데이트, 번들 시작을 많이 필요로하는 새로운 사용 사례에 대해,이 방법은 더 이상 없다 충분한.

대신 다른 설치 한 번들로 두 개의 프레임 워크를 동시에 보유 할 수 있고 필요에 따라 서로 번갈아 가며 교환 할 수 있기를 바랍니다. 어떤 경우에는 일부 번들을 중지했다가 다시 시작해야하지만 이러한 접근 방식은 대부분의 고통을 처리합니다.

어떻게 이런 식으로 설정할 수 있습니까?

미리 도움을 주셔서 감사합니다. 당신은 그들 모두에 대해 서로 다른 클래스 로더를 사용하여 여러 정적 인스턴스를 생성 할 수 있습니다

답변

3

EclipseStarter를 사용하지 마십시오. OSGi launching API을 사용하여 프레임 워크의 여러 인스턴스를 작성하십시오.

+0

소리가 울려 퍼집니다. 고맙습니다. 그래도 나는이 접근 방식에 문제가있다. 시작하고 첫 번째 프레임 워크를 사용한 후 두 번째 프레임 워크를 시작하면 더 이상 문제가 없습니다. 그러나 두 번째 프레임 워크에서 서비스를 요청할 때 올바른 서비스로 캐스팅 할 수 없습니다. 같은 캐스트가 첫 번째 프레임 워크에서 가져온 서비스로 잠시 일했지만 클래스 로더가 일치하지 않는 것 같습니다. 두 프레임 워크 시스템 패키지 모두에 서비스 패키지를 내 보냅니다. 당신은 어떤 생각을 가지고 있습니까, 왜 이것이 문제입니까? 동일한 패키지를 여러 프레임 워크로 내보낼 수 있습니까? – user1488793

+0

내 문제에 대한 해결책을 찾았습니다. Equinox 자체가 여러 프레임 워크에 문제가있는 것처럼 보입니다. ServiceLoader.load (FrameworkFactory.class) .iterator(). next()를 사용하여 새 프레임 워크를 만듭니다. Apache에서 Felix를 사용하는 것은이 접근 방식을 사용하고 있습니다. 반면에 춘분은 이것에 문제가있는 것 같습니다. 이유가 없습니다. – user1488793

+0

Equinox는 각 하위 프레임 워크를 호스팅 할 새 클래스 로더를 만듭니다. 프레임 워크 impl에서 몇 가지 통계를 해결하는 것이라고 생각합니다. –

0

세바스찬. EclipseStarter 클래스를 포함하는 JarFile로 설정된 경로로 다중 URLClassLoader을 작성하십시오. ClassLoader의 loadClass() 메소드를 사용하여 EclipseStarter 클래스 객체에 대한 참조를 가져옵니다.

관련 문제