0

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>

このチュートリアルで提供されている手順に従って、このサービスの実装クラスであるtransformServiceandというサービスを作成しました。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&amp;period=10000"/>
         <choice>
                <when ...> <bean ref="myTransformV0.1" method="transform"/>
                <otherwise> <bean ref="myTransformV0.2" method="transform"/>
         </choice>
      <to uri="log:ExampleRouter"/>
    </route>
  </camelContext>
4

1 に答える 1

1

OSGi のバージョン管理は、サービスのバージョン管理とは異なります。重要な問題は、異なるバージョンでこれらのキャメル ルートにアクセスするにはどうすればよいかということだと思います。

camel ルートが RESTful サービスを提供する場合、"/service/v1"、"/service/v2" などの別の URL を使用して、別のバージョンを簡単に提供できます。しかし、これは OSGi のバージョン管理とは異なり、ギャップを埋めるために何らかの作業を行う必要があります。

于 2014-04-09T03:53:15.537 に答える