从osgi蓝图将数据源作为属性传递给bean

时间:2016-10-06 12:28:41

标签: java blueprint-osgi

我有以下数据源:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="net.sourceforge.jtds.jdbcx.JtdsDataSource" />

...

</bean>

...

<service interface="javax.sql.DataSource" ref="dataSource">
    <service-properties>
        <entry key="osgi.jndi.service.name" value="jdbc/tempDB"/>
    </service-properties>
</service>

...

我在osgi蓝图中引用它:

<reference id="dsRef" 
    interface="javax.sql.DataSource" filter="(osgi.jndi.service.name=jdbc/tempDB)" 
    timeout="10000" />

我正在尝试将数据源作为属性传递给bean:

<bean id="app" class="com.temp.class.App">
      <property name="dataSource" ref="dsRef" /> 
      <property name="propertyOne" value="foo"/>
      <property name="propertyTwo" value="bar"/>    
</bean> 

然后我最终尝试访问数据源:

public void temp(Exchange exchange) throws Exception  { 
   DataSource ds = getDataSource();
   con = ds.getConnection();
}

我也尝试过这样的事情但没有成功:

Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("jdbc/tempDB");
ds.getConnection();

问题是当到达bean时属性dataSource为null。其他两个属性具有适当的值。数据源也适用于其他osgi:blueprints,所以没有任何问题。我应该在哪里寻找数据源属性为空的原因的解决方案?或者是否有另一种从bean连接到现有连接池的方法?

0 个答案:

没有答案