OSGi の利点の 1 つは、ここで説明されているバージョン管理です。ドキュメントによると、OSGi は「同じ jar」の異なるバージョンをホストし、それに応じて他のアプリケーションがそれらにアクセスできるようにします。
Camel ルートを使用して、OSGi の同じプロパティ ( Apache-Karafコンテナーを使用しています) を活用するタスクが与えられました。
サービスの複数のバージョンをデプロイし、Camelをリクエストに基づいて適切なバージョンにルーティングする必要があります。私はグーグルを広範囲に検索しましたが、適切な例が見つかりませんでした:(
ポインタを投げるか、例を教えてください。
アップデート
serviceとは、このように定義された osgi bundle service を意味します
<osgi:service ref="transformService">
<osgi:interfaces>
<value>demo.service.TransformService</value>
</osgi:interfaces>
</osgi:service>
このチュートリアルで提供されている手順に従って、このサービスの実装クラスであるtransformService
andというサービスを作成しました。TransformServiceImpl
ここで、変更TransformServiceImpl
して新しいバージョンとしてリリースするとします (でバージョンを更新することによりpom.xml
)。また、両方のバージョン、つまり と Karaf (Karaf で問題ありません) を demo.service-0.1.jar
インストールしdemo.service-0.2.jar
ます。この場合、特定のバージョンのサービスにルーティングするにはどうすればよいですか?
osgi:reference
同じサービスを指しているがバージョンが異なる2 つを作成できますか? このようなもの?
<osgi:reference id="myTransformV0.1" version="0.1" interface="demo.service.TransformService"/>
<osgi:reference id="myTransformV0.2" version="0.2" interface="demo.service.TransformService"/>
そしてそれらをルートで使用しますか?
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="timer://myTimer?fixedRate=true&period=10000"/>
<choice>
<when ...> <bean ref="myTransformV0.1" method="transform"/>
<otherwise> <bean ref="myTransformV0.2" method="transform"/>
</choice>
<to uri="log:ExampleRouter"/>
</route>
</camelContext>