OSGI Blueprintを初めて使用し、奇妙な問題に直面しています。Osgi Blueprintでサービスを動的にバインドできません。
私は2つの別々のデータベースを持っている:オラクルとH2青写真コンテナは次のようになります
DB(テストのために使用される):
<service ref='oracleDataSource' interface='javax.sql.DataSource'>
<service-properties>
<entry key='osgi.jndi.service.name' value='someJndiDatasourceName'/>
</service-properties>
</service>
<bean id='oracleDataSource'
class="CustomDataSourceImpl">
<property name="connectionFactoryClassName" value="${datasource.type}"/>
<property name="url" value="${url}"/>
<property name="user" value="${username}"/>
<property name="password" value="${password}"/>
<property name="validateConnectionOnBorrow" value="true"/>
</bean>
明らかに、サービスは、上記のOracleDataSourceに結合します。 datasource.typeプロパティーは構成ファイルから値を取り込み、値はoracle.jdbc.pool.OracleDataSourceです。
これで、後で構成ファイルを編集して値を変更したいとしますH2タイプにdatasource.typeの、そして私のサービス-refは下記のBeanにバインドする必要があります。
<bean id="h2ds" class="org.h2.jdbcx.JdbcDataSource">
<property name="URL" value="${url}"/>
<property name="user" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
我々は青写真における動的結合のような種類を行うことができますか?
基本的に、私はサービスロケータに似た何かを探しています。
DataSourceサービスを提供する場所では、「」要素が表示されていますが、サービスを使用する場所(通常は別のバンドルのもの)には「」要素は表示されていません。それは、潜在的に複数の候補となるDataSourceサービスを区別するための ' 'にあるので、それを示してください。 –
はい、別のバンドルからサービスを利用しています。 ** ** のための** **要素 しかし、私は要件が多少異なると思うので、私はH2データソースを私の** **私はpax統合テストを実行するたびに** pax統合テスト以外のものについては、oracleデータソースを** ** –
Sandy
にバインドしたいのですがなぜ? '要素は、バンドル内から固定Beanを取り出してサービスとしてエクスポートすることを意味します。これは、注入するBean自体ではありません。統合テストでは、Oracleの代わりにH2を使用して 'DataSource'を提供するバンドルを使用します。 –