Я новичок в OSGI Blueprint и столкнулся со странной проблемой.
У меня есть 2 отдельные базы данных: oracle и 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.
Теперь мой вариант использования заключается в том, что если я хочу позже отредактировать файл конфигурации и изменить значение datasource.type на тип h2, то мой service-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>
Можем ли мы сделать такую динамическую привязку в плане?
В принципе, я ищу что-то похожее на сервис-локатор.
<service>
, где вы предоставляете службу DataSource, но не показали элемент<reference>
, где вы используете эту службу (которая обычно была бы из другого пакета). Пожалуйста, покажите это, потому что это находится на<reference>
, где вы будете различать потенциально несколько служб-кандидатов DataSource. - person Neil Bartlett   schedule 14.12.2017<reference id="entityManagerFactory" interface="javax.persistence.EntityManagerFactory" filter="(osgi.unit.name=my-persistent-unit-name)" availability="mandatory"/>
Но я считаю, что требование несколько отличается, мне нужно внедрить источник данных H2 в мой ‹service›< /b> всякий раз, когда я запускаю интеграционный тест pax. Для всего остального, кроме теста интеграции pax, я бы хотел, чтобы он привязывал источник данных оракула к моей ‹службе›. - person Sandy   schedule 14.12.2017<service>
предназначен для того, чтобы взять фиксированный bean-компонент из пакета и экспортировать его как услугу. Это не сам боб, в который вы вводите. В своих интеграционных тестах вы просто используете пакет, который предоставляетDataSource
с использованием H2 вместо Oracle. - person Neil Bartlett   schedule 14.12.2017