저는 스프링 OSGI와 청사진에 익숙해졌지만 많은 뉴비와 같이 "classpath"어려움을 겪고 있습니다.번들을 사용하여 스프링 OSGI 서비스 참조 인터페이스를 명시 적으로 가져와야합니까?
두 개의 OSGI 번들이 있습니다. 하나는 여러 가지 빈을 정의하고 (문제가 아닌 청사진을 사용하여) 서비스로 내 보냅니다. (Spring OSGI를 사용하여) 서비스 빈을 참조하는 다른 번들을 아파치 Camel의 몇몇 경로에 연결한다.
이<service id="camelTsvDataFormat"
interface="org.apache.camel.spi.DataFormat">
<bean class="org.apache.camel.component.flatpack.FlatpackDataFormat"/>
</service>
서비스 소비자 번들의 Spring 컨텍스트 이런 식으로 뭔가 같습니다 :
<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>
을 ...하지만 배포에, 봄은 "찾을 수 없습니다
서비스 제공자 번들의 청사진이 같이 보입니다 class [org.apache.camel.spi.DataFormat] ". 내 Bnd 지침의 Import-Package 섹션에 인터페이스를 추가 할 수 있지만 별도의 위치에 클래스를 두 번 수동으로 나열해야하는 것은 과장된 것처럼 보입니다.
대체 방법은 내 프로젝트에서 인터페이스를 확장하여 Bnd가 자동으로 가져 오도록 설정하는 것입니다. 그러나 이것은 대략 큰 문제입니다.
실제로 인터페이스 클래스를 해결할 필요없이 인터페이스 이름으로 서비스를 조회하기 위해 Spring을 기대하고 있습니다. 이 번호가 ï 인 건가요? 아니면 Bnd가 appContext의 서비스 참조에 인터페이스를 자동으로 가져 오도록하는 방법이 있습니까? Bnd가이를 수행 할 수 있다면 (예 : 플러그인 사용) Baven 플러그인을 Maven 용 Apache Felix 번들 플러그인과 함께 사용하는 표준 방법이 있습니까?
이 내가 찾을 수있는 가장 가까운 설명은 다음과 같습니다 http://forum.springsource.org/archive/index.php/t-52913.html – RubyTuesdayDONO
다른 생각 -이없는 등 큰 문제는 IF이다 서비스 공급자 인터페이스는 Apache Camel과 마찬가지로 "spi"패키지에 잘 정리되어 있습니까? – RubyTuesdayDONO
일반적으로 bnd는 바이트 코드에서 참조되는 모든 패키지에 대해 가져 오기를 추가합니다. tsvDataFormat 필드는 어떤 클래스입니까? –