2009-07-06 6 views
4

서비스를 사용하는 우아한 방법이 또는 OSGi 컨테이너 사이에 있습니까?Remoting 및 OSGi

심지어 가능합니까?

예를 들어 로컬 컴퓨터에 서비스 인터페이스가 있다고 가정 해 봅시다. 원격 OSGi 컨테이너의 BundleContext를 통해 해당 서비스 인터페이스에 액세스 할 수있는 방법론/기술은 무엇입니까?

답변

9

원격 서비스 (이전에는 Distributed OSGi)라는 이름의 RFC를 사용하여 달성하려는 작업을 정확히 수행합니다. RFC는 거의 완료되었으며 이미 Apache CXF와 Eclipse ECF에 의해 각각 2 가지 구현이 제공되고있다.

두 가지 구현 모두 OSGi 서비스의 투명한 원격 처리를 허용합니다. 평소와 같이 OSGi 서비스를 정의하고 원격 매개 서비스가되도록 구성 매개 변수를 추가해야합니다.

확인 : http://cxf.apache.org/distributed-osgi.html

0

가능하지만이 작업을 수행 할 라이브러리 (afaik)가 없습니다. 나는 내 일을 위해 내 자신을 굴렸다. OSGi 런타임은 클라이언트와 서버에서 RMI가 전송됩니다. 나는 프록시 객체를 무겁게 사용해야했다.

서버의 OSGi 런타임 (Equinox)에 서비스를 등록하십시오. 나는이 서비스가 (원격으로 만들어 져야 함을 나타내는) 속성/속성을 찾고있는 모든 서비스를 감시하는 청취자를 가지고 있는데, "remotable = true"와 같은 것입니다. ServiceTracker를 사용하여 쉽게 필터링 할 수 있습니다. RMI를 통해 클라이언트에게 서비스 인터페이스로 Proxy 객체를 생성하도록 지시한다. 이 프록시 객체에 대한 모든 호출은 일반적으로 RMI (execService serviceid, 메소드 이름, var args params와 같은 호출)를 통해 다시 보내지고 REAL 서비스에서 호출됩니다.

저수준의 세부 사항 중 일부는 생략했지만 아마도이를 정렬 할 수 있습니다. RMI에서 벗어날 수 있다면 Riena을 조사하고 싶을 수도 있습니다. (Riena에 대한 RMI 전송을 작성하는 방법이있을 수도 있습니다. 시도해 볼 필요가 없습니다.)

0

당신이 무엇인지는 분명하지 않습니다. 성취하려고 노력한다. 서비스가 있고, RMI를 사용하여 액세스 할 수 있으며, OSGi 서비스로 사용할 수 있어야합니까?

로컬 컴퓨터 서비스에 대한 인터페이스를 작성할 수 있습니다. 그런 다음 해당 서비스에 연결하는 번들을 작성하고 해당 인터페이스를 OSGi 서비스 레지스트리에 표시 할 수 있습니다. 그런 다음 기본 번들은 인터페이스 이름이나 서비스 이름을 사용하여 해당 서비스를 찾을 수 있습니다.

로컬 서비스에 대한 RMI 연결을 얻는 데 너무 많은 작업이 있어서는 안됩니다. 어쩌면 초기 연결을 설정하는 일부 구성 옵션. 어떤 유형의 디커플링을 달성하고 RMI 서비스라는 사실을 숨기려면 OSGi에 게시하기 전에 서비스에 대한 외관을 작성하는 것이 중요 할 수 있습니다.

하지만 어쩌면 내가 완전히 오해 한 것일 수도 있습니다.이 모든 것은 쓸모가 없습니다.

0

뿐만 아니라 CXF 위, 또한 통신 프레임 워크의 모음이며, OSGi의 4.2 원격 서비스 (일명은 OSGi를 분산)의 초기 구현을 provies ECF를,이 이클립스로
. 클라이언트가 VM에서 바인드하는 로컬 서비스를 등록한 다음 원격 시스템에 프록시를 작성하고 선택한 기술 (RMI, WebServices 등)을 사용하여 원격 호출이 가능합니다.

분명히 이것은 (서비스가 알아야 할) by-value 메서드 호출 구문을 사용하지만 그 외의 모든 통신 오류는 RuntimeException입니다.

0

OSGi 사양 버전 4.2의 "원격 서비스"장을 확인하십시오. 여러 OSGi 컨테이너간에 서비스를 배포하기위한 표준 방법을 정의합니다.

OSGi 사양의 새 버전 4.3에는 이에 대한보다 자세한 지원이 나와 있습니다 (6 장 원격 서비스 및 112 원격 서비스 관리 서비스 참조).