2016-03-03 3 views
0

У меня есть следующий в моем приложении context.xml файл:Как имя компонента относится к компоненту?

<bean id="reportingDataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="org.postgresql.Driver"/> 
    <property name="url" value="jdbc:postgresql://192.168.1.1:5432/reports"/> 
    <property name="username" value="xxx"/> 
    <property name="password" value="xxx"/> 
    <property name="initialSize" value="3"/> 
    <property name="maxActive" value="10"/> 
</bean> 

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

и мой маршрут (сниппета) выглядит следующим образом:

.to("reportingSql:insert into my_table (uuid, name, created_at, created_by) values ('a','namename', 1, 2)") 

ясно, я просто торчу мой палец ноги в водах здесь ,

Этот код генерирует ошибку в /var/log/tomcat/whistler.log:

...due to: No component found with scheme: reportingSql 

Если я изменяю «reportingSql» в файле XML и в пути, чтобы быть просто «SQL», я получаю дальше - больше нет ошибки. Какая-то магия «sql»?

И если это так, я полагаю, что все в порядке, но что, если я захочу использовать дополнительный источник данных? Я не мог ссылаться на них как на «sql».

ответ

1

Компонент разрешен через ComponentResolver. По умолчанию DefaultComponentResolver использует следующие стратегии:

  1. Ищите компонент в реестре верблюдов. Если экземпляр найден, выполняется преобразование в Component
  2. Используйте для использования новый компонент по умолчанию FactoryFinder. Эта фабрика использует зарегистрированные классы в свойствах под META-INF/services/org/apache/camel/component/

Другими словами, то, что вы хотите сделать, возможно: Camel должен проверить именованный экземпляр в реестре. Однако в вашем примере вы используете файл весны для регистрации beans и java для создания маршрута.

С весной, когда вы используете <camelContext../>, создается SpringCamelContext, а не DefaultCamelContext. Этот контекст использует несколько служб, позволяющих лучше интегрироваться в приложении Spring. Одна из этих услуг - ApplicationContextRegistry, которые объединяют весенние бобы в реестр верблюдов. Именно этот реестр позволяет использовать bean-компонент, зарегистрированный весной, как Component.

Итак, проверьте, используете ли вы CamelContext из контекста Spring. Если нет, или вы не можете использовать управляемый camelContext, вы можете попытаться использовать SpringCamelContext или ApplicationContextRegistry.

См:

Смежные вопросы