Как интегрировать Apache Camel в веб-приложение Java Spring 3.0 для импорта данных

Я разрабатываю веб-приложение на основе фреймворка Spring 3.0.

Нет, я хочу интегрировать Apache Camel для импорта данных через файлы CSV в базу данных. Мне удалось запустить Camel и выполнить импорт в базу данных, следуя примеру конфигурации Apache Camel Spring .

Но теперь я хочу интегрировать Camel в веб-приложение, чтобы оно запускалось вместе. Но я не уверен, как это сделать. На данный момент кажется, что Camel запускается рядом с веб-приложением и использует свой собственный контекст. Особенно кажется, что он запускается перед веб-приложением, поскольку исключение возникает, когда Camel пытается автоматически подключить репозиторий базы данных, который является частью веб-приложения.

10:57:36.730 [main] ERROR o.s.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'routeConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.data.neo4j.repository.GraphRepository com.isarsoftware.ysura.config.RouteConfiguration.graphRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository' defined in class path resource [com/isarsoftware/ysura/config/GraphDBConfig.class]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.springframework.data.neo4j.repository.GraphRepository com.isarsoftware.ysura.config.GraphDBConfig.userRepository()] threw exception; nested exception is java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: Root WebApplicationContext: startup date [Fri Nov 16 10:57:35 CET 2012]; root of context hierarchy

Я должен признать, что я далек от того, чтобы быть профессионалом Spring. Но до сих пор мне удавалось заставить все работать, читая блоги и учебники. Но для этой проблемы я еще не мог найти никаких указаний.

Может ли кто-нибудь предложить мне учебник или пример того, кто может решить мою проблему?


person Flo    schedule 16.11.2012    source источник
comment
Можете ли вы опубликовать фрагменты из вашего web.xml, контекста сервлета Spring и контекста вашего верблюда, чтобы я мог видеть, как вы все настраиваете?   -  person Chris Snow    schedule 16.11.2012
comment
Также включите фрагмент из GraphDBConfig.userRepository(), так как это метод, вызвавший исключение   -  person Guido Simone    schedule 16.11.2012


Ответы (1)


см. http://camel.apache.org/tutorial-on-using-camel-in-a-web-application.html

в основном, просто добавьте Spring Listener в ваш файл web.xml

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

затем создайте файл /WEB-INF/applicationContext.xml с вашим CamelContext

<beans...>
    <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route>
          <from uri="seda:foo"/>
          <to uri="mock:results"/>
        </route>
    </camelContext>
</beans>
person Ben ODay    schedule 16.11.2012
comment
Хорошо, возможно ли использовать аннотацию @Configuration вместо файла XML? Как бы я тогда определил маршрут? Вот почему я попытался следовать примеру, который я упомянул в своем вопросе. - person Flo; 17.11.2012
comment
что такое seda:foo? - person Mikhail; 11.07.2016