문제

호스트 애플리케이션 내부에서는 간단한 푸시 서비스를 구현하려고 시도했는데, 이는 세트 및 GET 메소드를 제공하여 차량이라는 클래스의 인스턴스를 OSGI 세계로 전송하는 데 사용됩니다. 서비스 인터페이스와 차량 클래스를 모두 JAR 파일로 내보내고 번들 내에서 해당 파일을 가져 와서 서비스를 사용해야하는 서비스를 사용할 수 있으려면 서비스를 사용해야합니다.

호스트 애플리케이션 내에서 차량 클래스를 사용하려고 할 때마다 Felix Framework와 번들을 주입하는 경우 링키지 오류가 발생했습니다. 다음 블로그 항목을 읽은 후http://frankkieviet.blogspot.com/2009/03/javalanglinkageerror-loader-sonstraint.html)이 오류가 발생하는 이유를 이해했습니다. 그러나 나는 내 문제를 해결하는 방법에 대한 단서가 없습니다.

호스트 응용 프로그램과 OSGI 인스턴스간에 클래스를 공유 할 수 있습니까? JAR 파일을 가져 오는 대신 반사를 사용해야합니까? 나는 그 도서관을 보았다 (http://code.google.com/p/transloader/) 그리고 나는이 lib가 내 문제를 해결할 수 있는지 확실하지 않습니다 ...

Br,

마르쿠스

도움이 되었습니까?

해결책

한 번에 Felix를 사용하여 사용자 정의 클라이언트 서버 응용 프로그램에서 요구하는 일을 정확하게 수행했습니다. 이후 Equinox로 전환했습니다 (Osgi 번들로서 Swing LAF에 필요한 프레임 워크 조각을 올바르게 구현합니다). 나 생각한다 다음은 Felix에서 작동합니다. i 알다 Equinox에서 작동합니다.

업데이트 : 호스트 응용 프로그램과 매우 유사한 경로를 시작했습니다. 나는 플랫폼을 진정으로 활용하기 위해 가능한 많은 코드를 실제 OSGI 번들로 옮길 필요가 있다는 것을 일찍 깨달았습니다. 내 호스트 응용 프로그램은 클라이언트/서버 통신을 설정하고 번들을 동기화합니다. 그게 다야. 내가 공유했던 몇 가지 수업은 번들로 옮겨졌으며 뒤돌아 보지 않았습니다. 디자인/애플리케이션이 다수의 묶음에있는 대부분의 코드를 지원할 수 있다면 분명히 그 경로를 갈 것입니다. 일부 재 설계가 필요하더라도 그만한 가치가 있습니다.

OSGI 런타임을 초기화하기 전에이 속성을 설정하십시오. "org.osgi.framework.system.packages"반 콜론으로 분리 된 패키지 (와일드 카드 없음); ";". 기본 OSGI 패키지, "org.osgi.framework"및 기본 서비스 "org.osgi.packageadmin", "org.osgi.startlevel", "org.osgi.url"을 추가로 포함해야 할 수도 있습니다.

방금 내 버전 컨트롤을 파고 여전히 Felix를 사용할 때 스 니펫을 찾았습니다 (설정은 Equinox의 경우 거의 동일합니다).

Map<String, String> configMap = new HashMap<String, String();

configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES,
    "your.package;other.package;org.osgi.framework");

// setup other properties

Bundle systemBundle = new Felix(configMap, null);
systemBundle.start();

// Now you can use classes from "your.package" with explicity 
// declaring them as imports in bundles
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top