Мы поговорили о том, как начать разработку приложений в EAP с помощью Spring DSL. Из всех трех способов разработки Camel в EAP это, вероятно, проще всего сделать. И в этом посте мы рассмотрим этот пример немного дальше, покажем, как интегрировать с базами данных, Java-бинами в приложение, создать сервлет и, наконец, настроить веб-сервис Restful.
Для этого проекта обмена валюты я сохранил обменный курс в базе данных h2. Мы собираемся отобразить полный курс обмена на веб-странице, предоставленной веб-службой restful, и предоставить сервлет, который принимает сумму денег и валюту для обмена, отправляет их обратно на сервер, вычисляет и возвращает результат. Итак, вот что я собираюсь сделать
- База данных
- Java Bean
- Servlet
- Restful Web Services
База данных
Конечно, мы хотим использовать источники данных в EAP. Итак, во-первых, создайте источник данных в EAP. Убедитесь, что вы запустили JBoss EAP. Перейдите к Конфигурации, выберите Соединитель, а затем к источникам данных.
- Имя: MyCamelDS
- Имя JNDI: java: jboss / datasources / MyCamelDS
Выберите драйвер, который мы будем использовать, и это h2 в этом случае,
Введите
- URL соединения: jdbc: h2: файл: ~ / h2 / fuseoneap; AUTO_SERVER = TRUE
- Имя пользователя: sa
- Пароль:
Измените минимальный и максимальный размер пула на 1 и 10. Затем включите источник данных MyCamelDS.
Как только мы подготовим источник данных, мы сможем использовать его, посмотрев его в нашем Spring Camel DSL.
Добавьте новое пространство имен jee в XML-файл Spring,
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd">
Найдите источник данных в JNDI, используя jndi-lookup, предоставленный jee.
<jee:jndi-lookup id="MyCamelDS" jndi-name="java:jboss/datasources/MyCamelDS"/>
И затем мы можем продолжать использовать источник данных с нашим компонентом SQL, так же, как мы использовали бы его в другом контейнере.
<route id="allcurrencies">
<from uri="direct:getCurrencies"/>
<to uri="sql:select * from currencyexchange?dataSource=MyCamelDS"/>
<marshal>
<json library="Jackson"/>
</marshal>
</route>
Java Bean
Создайте Java-класс, у которого есть метод, который требует обмена денег и денег.
public class CurrencyConvertor {
public double convertUSD(double amt, ArrayList<Map<String, Object>> data){
Double rate = (Double)data.get(0).get("rate");
return amt*rate;
}
}
В Spring Camel Route, как и в обычном приложении Fuse, связывается Java-бин, который мы создали в контексте.
<bean id="currencyconvertor" class="com.redhat.demo01.CurrencyConvertor"/>
И вызвать бин связывания с помощью компонента бина.
<route id="covertcurrency">
<from uri="direct:getCurrency"/>
<log message="Got currency: ${headers.amt} and amt${headers.currency}"/>
<choice>
<when>
<header>currency</header>
<to uri="sql:select * from currencyexchange where currencycode= :#currency ?dataSource=MyCamelDS"/>
<log message="exchange rate ====> ${body[0][rate]}"/>
<bean ref="currencyconvertor" method="convertUSD(${headers.amt},${body})"/>
</when>
<otherwise>
<log message="nothing to lookup"/>
<transform>
<constant>nothing to lookup</constant>
</transform>
</otherwise>
</choice>
</route>
Servlet
Нам нужно настроить сервлет, под webapp создать файл WEB-INF / web.xml. Щелкните правой кнопкой мыши по дескриптору развертывания и выберите «Создать заглушку дескриптора развертывания». Это создаст пустой файл web.xml для вас.
Добавьте параметр сервлета в web.xml и опубликуйте его
<servlet>
<servlet-name>camel</servlet-name>
<servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>camel</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
После этого мы можем использовать компонент Servlet в Camel, он опубликует конечную точку сервлета через сервлет, который мы установили ранее.
<route id="servletCurrencies">
<from uri="servlet:/currencies?servletName=camel&matchOnUriPrefix=true"/>
<to uri="direct:getCurrencies"/>
</route>
Restful Web Service
Веб-сервисы Restful также должны иметь настройку CamelHttpTransportServlet, так как мы уже сделали это в Servlet, все, что нам нужно сделать, — это построить конечные точки Rest в качестве потребителей в Rest DSL. А затем настройте его на сервлет.
<restConfiguration component="servlet" bindingMode="json" contextPath="/camel">
<dataFormatProperty key="prettyPrint" value="true"/>
</restConfiguration>
<rest path="/currenciesrest">
<get uri="/">
<to uri="direct:getCurrencies"/>
</get>
</rest>
Это все, что вам нужно сделать.