osgi-karaf-服务和骆驼路线的多个版本

时间:2014-04-08 13:23:42

标签: java osgi apache-camel apache-karaf blueprint-osgi

OSGi的一个好处是版本控制explained here。根据文档,OSGi可以托管不同版本的"相同的jar"并让其他应用程序相应地访问它们。

我被赋予了一项任务,即使用Camel路由来利用OSGi的相同属性(我使用 Apache-Karaf 容器)。

我必须部署服务的多个版本,并将 Camel 路由 添加到正确的基础上根据要求。我广泛搜索谷歌,但我还没有找到一个合适的例子:(

请给我任何指示或指导我一个例子。

更新

通过 service ,我的意思是osgi捆绑服务,它被定义为这样

  <osgi:service ref="transformService">
        <osgi:interfaces>
            <value>demo.service.TransformService</value>
        </osgi:interfaces>
  </osgi:service>

我已按照this tutorial中提供的步骤创建名为transformService的服务,TransformServiceImpl是此服务的实现类。

现在让我们说我将修改TransformServiceImpl并将其作为新版本发布(通过在pom.xml中更新我的版本)。此外,我将在 Karaf 中安装两个版本,即demo.service-0.1.jardemo.service-0.2.jar(这与Karaf一样)。在这种情况下,我如何路由到特定版本的服务?

我可以创建2个osgi:reference,它指向相同的服务但​​不同的版本?像这样的东西?

 <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>

1 个答案:

答案 0 :(得分:1)

OSGi版本控制与服务版本控制不同。我认为关键问题是如何使用不同的版本访问这些骆驼路线。

如果您的骆驼路线提供RESTful服务,则可以通过使用不同的URL来轻松提供不同的版本,例如&#34; / service / v1&#34;,&#34; / service / v2&#34;。但它与OSGi版本不一样,你仍然需要做一些工作来填补空白。