2014-01-25 3 views
0

OSGi 서비스로 놀기 시작한 데는 다음과 같은 상황이 있습니다. 나는 2 개의 서비스를 포함하는 프로젝트를 가지고있다. 서비스 A에는 서비스 B가 필요하므로서비스 간 osgi 의존성 삽입

@Inject 
private ServiceB svc; 

을 사용하여 종속 서비스를 주입하려했지만 프레임 워크를 주입하지 않았습니다. "바인드/undbind"내은 OSGi componentA.xml에서 프레임 워크가 이 메소드를 호출으로 다음과 같은 두 가지 서비스 및 A 의 방법과 이러한 방법을 설정하고 나는 서비스 A에 서비스 B를 사용할 수 있습니다 I 설정하면

public synchronized void bind(IServiceB service) 
{ 
    this.svc = service; 
} 

public synchronized void unbind(IServiceB service) 
{ 
    if (this.svc == service) 
    { 
    this.svc = null; 
    } 
} 

질문은 @Inject와 함께 작동하지 않는 이유는 무엇입니까? 이것이 바보 같은 질문이라면 죄송합니다. 저는이 주제 전체에서 아주 새로워졌습니다. 미리 많은 감사드립니다!

답변

0

필드 주입 또는 JSR-330 주석을 지원하지 않는 선언적 서비스를 사용하는 것처럼 보입니다. 필드 주입은 OSGi에서 유틸리티가 제한적이며, 서비스는 언제든지 또는 "비 주입"으로 주입 될 수 있습니다. 메소드 삽입은보다 일반적으로 유용합니다. 왜냐하면이 메소드가 발생하면 무언가를 할 수있는 기회를 제공하기 때문입니다.

그러나 선언 서비스에 대한 특수 효과 사용을 권해드립니다. 이렇게하면 component.xml을 직접 작성하지 않아도됩니다.

+0

안녕하세요 닐 님, 감사합니다. 나는 언급하지 않았지만 당연히 맞습니다. 저는 DS를 사용하고 있습니다. 'DS 용 특수 효과'에 대해 더 자세히 설명해 주시겠습니까? 지금까지 내가 한 것은 component.xml을 생성하고 이클립스 편집기 (매니페스트 편집기와 마찬가지로 구현 인터페이스를 설정하기위한 몇 번의 클릭만으로)를 사용하여 필요한 정보를 설정하는 것입니다. 미리 많은 감사드립니다! – paddy3k

+0

다시 한번 말하지만 Eclipse PDE (Plugin Development Environment)를 사용하고 계신다는 추측이 있습니까? 아깝게 아프다. 그것은 당신에게 많은 고통을 줄 것입니다. PDE에서는 본질적으로 * anything *을 생성 할 수 없으며 모든 것을 손으로해야합니다. 특수 효과에 대한 아이디어를 구체적으로 제공해야하는 bndtools 자습서 (http://bndtools.org/tutorial.html)를 살펴보고 일반적으로 적절한 도구가 어떻게하면 훨씬 쉽게 작업을 수행 할 수 있는지 알아보십시오. –

+0

Eclipse JEE 에디션을 사용하고 있습니다. bndtools 힌트 주셔서 감사합니다, 나는 더 자세히 조사 할 것입니다! 처음에 나는 이러한 주석이 OSGi에 의해 "out-of-the-box"라고 생각했습니다. 나는 그 질문이 충분히 분명 해졌고 다시 그것에 대해 감사한다고 생각한다! – paddy3k