봄 OSGI 서비스를 참조 인터페이스이어야 합 명시적으로 수입하는 소모니까?

StackOverflow https://stackoverflow.com/questions/8994253

문제

나는 익숙해지고 봄 OSGI 과 청사진이지만,이는"클래스 경로"어려움에(같은 많은 초보자).

나는 두 OSGI 번들는 정의하는 다양한 콩(를 사용하여 청사진이다)및 수출로 서비스와 다른 번들을 참조하는 서비스 콩(를 사용하여 봄 OSGI)및 플러그로 그들을 어떤 아파치는 낙타의 노선이 있습니다.

서비스 공급자는 번들의 청사진을 다음과 같이 나타납니다.

<service id="camelTsvDataFormat" 
    interface="org.apache.camel.spi.DataFormat"> 
    <bean class="org.apache.camel.component.flatpack.FlatpackDataFormat"/> 
</service> 

서비스-소비자는 번들의 봄 컨텍스트는 다음과 같습니다:

<osgi:reference id="tsvDataFormat" 
    interface="org.apache.camel.spi.DataFormat" /> 

<camel:camelContext> 
    <route> 
        <from uri="vm:in"> 
        <setBody> 
            <constant>SELECT * FROM myTable</constant> 
        </setBody> 
        <to uri="jdbc:myDataSource" /> 
        <marshal ref="tsvDataFormat" /> 
        <to uri="file:/path/to/my/files/?fileName=out.tsv" /> 
    </route> 
</camel:camelContext> 

...그러나 배포,"봄을 찾을 수 없는 클래[org.apache.낙.spi.DataFormat]".를 추가할 수 있습니다 인터페이스를 가져오기 패키지 섹션의 내 Bnd 지침이지만,그것은 보인다 중복하여 수동으로 목록을 두 번 클래스에는 별도의 위치입니다.

다른 선택을 확장하는 것이 인터페이스 내에서 자신의 프로젝트 Bnd 것이 자동으로 그것을 선택하지만,이것은 대략 많은 문제입니다.

난 기대하는 봄을 조회 서비스에 의해 인터페이스 이름없이 실제로 해결 인터페이스 클래스입니다.는 이 순진한 사람인가요?또는 방법이 있을 Bnd 자동으로 가져오 인터페이스에서 내 appContext 의 서비스를 참조?는 경우 Bnd 작업을 수행 할 수 있습니다(예:플러그인을 사용하여),가 표준을 사용하는 방법 Bnd 플러그인으로 아파치 Felix 번들은 플러그인에 대한 Maven?

도움이 되었습니까?

해결책

홀리를 제안 할 때 BND는 일반적 으로이 패키지를 호출하는 번들 안의 모든 바이트 코드에서 참조됩니다.또한 오른쪽 위치에있는 경우 Introspect Spring-DM XML 파일도 있어야합니다.그러나 동일한 번들 위치에 있지 않으므로 Blueprint XML 파일을 동일한 방식으로 지원하는지 여부를 알지 못합니다.따라서 BND 버전을 업그레이드하거나 청사진을 지원하는 플러그인을 사용해야 할 수도 있습니다.

그러나 나는이 모든 것을 의심스럽게 생각합니다.인터페이스에 대한 바이트 코드 참조가 없으면 서비스 참조를 사용하지 않아도됩니다.이 경우뿐만 아니라 삭제하지 않으시겠습니까?

다른 팁

로@닐스 바시,Bnd 해야 성찰의 봄과 청사진 파일에 기준치 이내에 번들(META-INF/springOSGI-INF/blueprint).나는 수동으로 재정의 이로 META-INF/spring/*.xmlOSGI-INF/blueprint/*.xml 내 POM.나는 생각이 있었기 때문에 잘 봄과 청사진을 연장 내 OSGI 플랫폼을 받아 헤더와 bootstraped 해당 컨테이너입니다.Bnd,그러나 나타납니다 기대하는 간단하 헤더없이 많(참조하십시오 SpringXMLType.java).나는것을 의미하지 않는 할당을 잘못 때문에 그것은 놀라운 도구이지만 이 잡은 나 off guard.

어쨌든 때문에,내년 봄과 청사진을 마크업은 이미 기준에 위치,내가 그냥 제거 중복 Bnd 지침에서 내 POM,그리고 모든 봄 DM 서비스를 참조 인터페이스가 자동적으로 집어 Import-Package'd 로 묶:

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>2.3.6</version>
    <extensions>true</extensions>
    <configuration>
        <instructions>
            <Bundle-Version>${project.version}.${buildNumber}</Bundle-Version>
            <Bundle-Activator>com.example.BundleActivator</Bundle-Activator>
            <!-- 
                <Spring-Context>META-INF/spring/*.xml</Spring-Context> 
                <Bundle-Blueprint>OSGI-INF/blueprint*.xml</Bundle-Blueprint> 
            -->
        </instructions>
    </configuration>
</plugin>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top