如何在 java 中使用来自另一个包的 OSGI 引用

How to use an OSGI reference from another bundle in java

我正在使用 JBoss Fuse,我创建了一个导出 DataSouce 的包,现在我想查询它。

在另一个包的蓝图中引用了所述数据源:

  <reference 
      id="myDataSource"
      filter="(osgi.jndi.service.name=myDataSouce)" 
      interface="javax.sql.DataSource"
  />

如何从 java 代码访问此引用以便查询它?

您可以创建自定义 Bean:

<bean id="myDsBean" class="my.company.MyDsBean">
    <property name="dataSource" ref="myDataSource" />
</bean>

Java代码:

public class MyDsBean {

    private JdbcTemplate myds;

    public void setDataSource(DataSource ds) {
        this.myds = new JdbcTemplate(ds);
    }
    // Code to query data source
}

我的示例使用的是 JdbcTemplate,但您可以将其替换为您想要使用的任何内容。