如何获得对具有参数化 JNDI 名称的 OSGi 数据源的引用?

How to obtain a refrence to an OSGi Datasource with parameterised JNDI name?

请原谅我的无知,但我找不到任何资源来描述如何在不对 Spring XML 定义中的名称进行硬编码的情况下获取对 OSGi 声明的数据源的引用。

我正在使用 Talend ESB SE 运行时 (6.5.1),并尝试创建一个路由,该路由将与不同的 osgi 数据源一起作为路由的引用数据源重复使用。

如果,在Spring配置中我声明

<osgi:reference id="dataSource" interface="javax.sql.DataSource" filter="(osgi.jndi.service.name=myDataSourceName)" />

这行得通。但是,我看不到任何参数化方法,因为当我尝试使用

<osgi:reference id="dataSource" interface="javax.sql.DataSource" filter="(osgi.jndi.service.name=${app.datasource.name})" />

karaf 日志抱怨它找不到名为 ${app.datasource.name} 的服务,显然它不会找到。

如果参数不能在 osgi 引用的过滤器中使用,那么我可以在 Java 中配置它,但我在任何地方都看不到如何从 Camel 上下文注册表获取底层 OSGi注册表 - osgi:reference 元素在 Spring XML.

中执行的操作

如果有人能在这里指出正确的方向,那就太好了,因为我怀疑我可能误解了各个组件的功能。

谢谢!

我认为这是配置 属性 占位符的问题,因为日志中必须有您的 app.datasource.name 属性 的值,而不是 属性 名称。尝试使用 spring xml 配置,如 this