我有以下数据源:
<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连接到现有连接池的方法?