从 OSGi 包访问数据源

Accessing a datasource from an OSGi bundle

我有一个包含部署到 Apache ServiceMix 的数据源的蓝图文件。我能够从 Apache Karaf 控制台查询数据源。如何从 Camel Spring-DM 捆绑应用程序访问此数据源?这是我的蓝图文件:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
   <bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource">
        <property name="URL" value="URL"/>
        <property name="user" value="USER"/>
        <property name="password" value="PASSWORD"/>
    </bean>
  <service interface="javax.sql.DataSource" ref="dataSource" id="ds">
    <service-properties>
            <entry key="osgi.jndi.service.name" value="jdbc/ds"/>
    </service-properties>
  </service>
</blueprint>

您可以将 DataSource 绑定为 OSGi 服务。在 spring dm 中这是 osgi:reference,在蓝图中它将是参考。

<reference id="dataSource" interface="javax.sql.DataSource"/>

然后您可以将数据源注入到 SqlComponent 中。

例如,查看我为 this camel route 所做的修复。这是蓝图,但 spring dm.

几乎相同
<bean id="sql" class="org.apache.camel.component.sql.SqlComponent">
    <property name="dataSource" ref="dataSource"/>
</bean>

使用 Hibernate 作为 JPA 提供:

<?xml version="1.0" encoding="UTF-8"?>

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
                                 http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">   

     <persistence-unit name="jpa" transaction-type="JTA">
         <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
         <jta-data-source>osgi:service/jdbc/ds</jta-data-source>

     ...

    </persistence-unit>
</persistence>