从OSGi包访问数据源

时间:2017-01-23 17:03:55

标签: spring apache-camel osgi apache-servicemix

我有一个蓝图文件,其中包含部署到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>

2 个答案:

答案 0 :(得分:1)

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

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

然后,您可以将DataSource注入SqlComponent。

作为示例,请参阅我为this camel route所做的修复。这是蓝图,但对于spring dm来说几乎是一样的。

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

答案 1 :(得分:1)

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