2013-03-17 3 views
0

내 번들을 구성하는 좋은 방법이 궁금해서 서비스에 대한 매개 변수로 필요한 클래스를 서로 공유 할 수있게되었습니다.OSGi 서비스 클래스 종속성

는 내가 가진 bundes 사이에 참조 할 필요가있을 것이다 클래스 유형을 노출 서비스 인터페이스의 몇 예 :

public interface DoesThis { 
    public CustomClassB doSomething(CustomClassA customClassA); 
} 

나의 이해 CustomClassA에서 (노출 된 서비스와 동일한 번들에 정의 된 경우) 않을 것 다른 번들에서도 사용할 수 있도록 패키지 내 번들간에 클래스 참조를 노출하는 것이 가장 좋을까요?

하위 질문과 마찬가지로 : 서비스와 패키지 내보내기가 서로 손을 맞잡고있는 것입니까? 내가 읽었던 설명서에서 분명하지 않았습니다.

감사합니다.

+0

코드 예제를 수정하여 요청한 내용을 명확히 할 수 있습니까? 그건 유효한 Java가 아닙니다. –

+0

@Neil Bartlett 해결! – JLove

답변

1

기본적으로 그렇습니다. 인터페이스에서 참조하는 모든 유형은 내 보낸 패키지에 있어야합니다. 몇 가지 옵션이 있습니다

  • 그들은 그들이 자연스럽게 인터페이스와 같은 시간에 수출 될 경우에 인터페이스와 같은 패키지에있을 수 있기 때문에은 OSGi에서 우리는 항상 내보내기/가져 오기 전체 패키지.
  • 다른 패키지에있을 수 있지만 서비스 인터페이스와 동일한 번들로 내보낼 수 있습니다.
  • 다른 패키지에있을 수 있으며 다른 번들로 내보낼 수 있습니다. 이 경우 서비스 인터페이스 번들은 해당 패키지를 가져와야합니다.

생각해 보면 형식을 내보낼 수 없다는 의미입니다. 예를 들어 CustomClassA 유형의 객체를 생성 할 수 없거나 반환 유형 CustomClassB을 이해할 수없는 경우 소비자가 doSomething 메소드를 호출하는 방법은 무엇입니까?

하위 질문에 대해서는 ... 예, 패키지 내보내기는 주로 서비스 레지스트리를 지원하기 위해 존재합니다. 서비스는 공급자와 소비자가 서비스의 "계약"에 대한 합의에 도달 할 수있는 경우에만 작동 할 수 있습니다. Java 계약에서는 서비스가 동일한 인터페이스를로드한다는 의미입니다.

+0

답변 주셔서 감사합니다 ... 나는 이것이 내가 기대 한 것이라고 생각합니다. 후속 조치로서, 다른 번들에서 서비스를 참조하기 위해 서비스를 제공하는 번들에서 컴파일 시간 의존성 (Maven을 사용하고 있습니다)을 작성합니까? (즉, 다른 번들에있는 서비스 클래스를 참조하려면 어떻게해야합니까?). 컨텍스트를 통해 구체적인 구현을 얻을 수 있지만 두 번째 번들을 컴파일하려면 인터페이스/서비스에 대한 참조가 필요하다는 것을 이해합니다! 다시 한 번 감사드립니다 – JLove

+1

아니요, * 인터페이스 *가 포함 된 패키지를 가져옵니다. 서비스의 전체적인 요점은 특정 구현 클래스와의 연결을 끊어서 인터페이스에만 의존한다는 것입니다. 서비스 객체를 얻으려면 Declarative Services를 사용하는 것이 가장 쉽습니다. 예를 들어, [Bndtools tutorial] (http://bndtools.org/tutorial.html)을 시도하십시오. –

+0

다시 한번 감사드립니다 ... 나는 인터페이스 개념을 이해하고 있으며, 빌드 시간 의존성을 해결할 방법을 찾기 위해 고심하고 있습니다. OSGi 용 Eclipse만큼 성숙하지 않은 넷빈을 사용합니다. Netbeans에서이 작업을 수행하는 유일한 방법은 프로젝트 의존성을 추가하는 것입니다. 프로젝트 종속성을 추가하면 전체 프로젝트에서 어떤 일이 발생하지 않는 클래스를 참조 할 수 있습니다 (Netbeans가 OSGi를 인식한다면). 지금 당장은 Netbeans을 기업 정책의 일부로 사용해야하므로 꼭해야 할 것입니다. – JLove