在Java EE组件中使用骆驼路线
從現在開始我一直在與Camel合作,我真的很喜歡它的簡單性。 在Java EE之上始終使用它一直是一個挑戰,而我最近發表的有關如何做到這一點的演講之一以及Java EE中引導Camel的不同方法實際上建議使用WildFly-Camel Subsystem 。 在正在進行的系列文章中,我將探索實現此目標的不同方法,并提供大量示例,而這些示例仍是演講中所缺少的。 我很高興在評論中或通過Twitter上的@myfear收到您的反饋和要求。
WildFly 8.2駱駝入門
Wildfly-Camel子系統提供了Apache Camel與WildFly Application Server的集成。 它允許您將駱駝路線添加為WildFly配置的一部分。 路由可以部署為Java EE應用程序的一部分。 Java EE組件可以訪問Camel Core API和各種Camel Component API。 您的企業集成解決方案可以構造為Java EE和Camel功能的組合。
注意:WildFly-Camel的3.x版本預計將支持最新的WildFly 9。
準備好
將WildFly 8.2.0.Final下載并解壓縮到您選擇的文件夾中。 將wildfly-camel補丁 (2.3.0)下載并解壓縮到wildfly文件夾。 從開始WildFly
bin/standalone[.bat|.sh] -c standalone-camel.xml建立和運行最快的方法之一是使用Docker和WildFly Camel映像 。 該映像與WildFly 8.1和已安裝的Camel子系統捆綁在一起。
定義和使用駱駝上下文
CamelContext表示單個Camel路由規則庫。 您使用CamelContext的方式類似于Spring ApplicationContext的方式。 它包含您應用程序的所有路由。 您可以根據需要擁有任意數量的CamelContext,只要它們具有不同的名稱即可。 WildFly-Camel讓我們將它們定義為a)作為子系統定義本身的一部分在standalone-camel.xml和domain.xml中定義,以及b)或在包含-camel-context.xml后綴文件的受支持的部署工件中進行部署 c)可以通過RouteBilder和CDI集成與路由一起提供。
可以通過兩種不同的方式使用已定義的CamelContext:a) 通過Camel-CDI @Injected注入或b)從JNDI樹訪問。
示例上下文和路由
對于以下示例,我將使用上下文以及通過CDI和RouteBuilder提供的關聯路由。 它是一個應用程序范圍的Bean,它隨應用程序啟動自動啟動。 @ContextName批注為CamelContext提供了一個特定的名稱。
@ApplicationScoped @Startup @ContextName("cdi-context") public class HelloRouteBuilder extends RouteBuilder {@InjectHelloBean helloBean;@Overridepublic void configure() throws Exception {from("direct:start").transform(body().prepend(helloBean.sayHello()).append(" user."));} }路線本身并不完全具有挑戰性。 它從direct:start中獲取一個空的消息正文,并在CDI bean方法“ sayHello”的輸出之前添加內容,并在字符串后附加“ user”。 對它。 作為參考,可以在我的GitHub帳戶上找到完整的代碼。 因此,接下來我們需要找出的是如何在各種Java EE組件規范中使用此路由。
從CDI使用駱駝
Camel從2.10版本開始支持CDI。 在子系統之前和之外,需要對其進行引導。 這不再是必須的,您只需在名稱中簡單地@Inject即可在@Named CDI bean中使用已部署或定義的CamelContext:
@Inject@ContextName("cdi-context")private CamelContext context;在JSF,JAX-RS和EJB中使用駱駝
有了有關如何在CDI中使用CamelContext的知識,您將假定,很容易從JSF等中進行相同的操作。 這不是真的。 實際上,您不能將其注入綁定到JSF組件的ManagedBean甚至CDI Bean中。 另外,它在EJB中不起作用。 我沒有詳細研究它,但假定它與范圍有關。 一個合理的解決方法,實際上是一個更好的應用程序設計,是將完整的Camel邏輯放入單獨的CDI bean中,然后將其注入。
@Named public class HelloCamel {@Inject@ContextName("cdi-context")private CamelContext context;private final static Logger LOGGER = Logger.getLogger(HelloCamel.class.getName());public String doSomeWorkFor(String name) {ProducerTemplate producer = context.createProducerTemplate();String result = producer.requestBody("direct:start", name, String.class);LOGGER.log(Level.INFO, result);return result;} }ProducerTemplate接口允許您以各種不同的方式將消息交換發送到端點,以使其易于使用Java代碼處理Camel Endpoint實例。 在這種情況下,它只是開始路由,并在主體中放置一個String,它表示我正在使用它的組件的名稱。
CDI Bean充當組件的后備bean,僅使用它:
@InjectHelloCamel helloCamel;public String getName() {return helloCamel.doSomeWorkFor("JSF");}返回字符串為“ Hello JSF user”。 這也將寫入WildFly服務器日志。 對于所有其他Java EE組件,最好使用相同的方法。
從EJB使用駱駝
如果您使用EJB作為man應用程序組件模型,那么僅使用JNDI方法也是非常合理的:
CamelContext camelctx =?(CamelContext) inicxt.lookup("java:jboss/camel/context/cdi-context");Hawtio –駱駝控制臺
子系統中的另一個隱藏的寶石是Hawtio控制臺的捆綁。 它是一個用于管理Java內容的模塊化Web控制臺,并具有一個Apache Camel插件,可可視化您的上下文和路由。 請記住,它是自動配置的安全性,您需要添加管理用戶才能訪問它。
進一步閱讀和幫助
- 在Freenode上與開發人員交談
- WildFly-Camel子系統文檔
- GitHub上的WildFly Camel
- Apache Camel網站
翻譯自: https://www.javacodegeeks.com/2015/07/using-camel-routes-in-java-ee-components.html
總結
以上是生活随笔為你收集整理的在Java EE组件中使用骆驼路线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 银行怎么核查婚姻状况?
- 下一篇: jsf 开发_JSF开发人员应该知道的5