java ee各类组件_在Java EE组件中使用骆驼路线
java ee各類組件
從現(xiàn)在開(kāi)始我一直在與Camel合作,我真的很喜歡它的簡(jiǎn)單性。 在Java EE之上使用它一直是一個(gè)挑戰(zhàn),我最近發(fā)表了一篇關(guān)于如何做到這一點(diǎn)的演講,而在Java EE中引導(dǎo)Camel的不同方法實(shí)際上建議使用WildFly-Camel Subsystem 。 在正在進(jìn)行的系列文章中,我將探討實(shí)現(xiàn)此目標(biāo)的不同方法,并提供大量示例,而這些示例仍是演講中所缺少的。 我很高興在評(píng)論中或通過(guò)Twitter上的@myfear收到您的反饋和要求。
WildFly 8.2駱駝入門
Wildfly-Camel子系統(tǒng)提供了Apache Camel與WildFly Application Server的集成。 它允許您將駱駝路線添加為WildFly配置的一部分。 路由可以部署為Java EE應(yīng)用程序的一部分。 Java EE組件可以訪問(wèn)Camel Core API和各種Camel Component API。 您的企業(yè)集成解決方案可以構(gòu)造為Java EE和Camel功能的組合。
備注:WildFly-Camel的3.x版本預(yù)計(jì)將支持最新的WildFly 9。
準(zhǔn)備好
將WildFly 8.2.0.Final下載并解壓縮到您選擇的文件夾中。 將wildfly-camel補(bǔ)丁 (2.3.0)下載并解壓縮到wildfly文件夾。 從開(kāi)始WildFly
bin/standalone[.bat|.sh] -c standalone-camel.xml最快的啟動(dòng)和運(yùn)行方法之一是使用Docker和WildFly Camel映像 。 該映像與WildFly 8.1和已安裝的Camel子系統(tǒng)捆綁在一起。
定義和使用駱駝上下文
CamelContext表示單個(gè)Camel路由規(guī)則庫(kù)。 您使用CamelContext的方式類似于Spring ApplicationContext。 它包含您應(yīng)用程序的所有路由。 您可以根據(jù)需要擁有任意多個(gè)CamelContext,只要它們具有不同的名稱即可。 WildFly-Camel讓我們將它們定義為a)作為子系統(tǒng)定義本身的一部分在standalone-camel.xml和domain.xml中定義,以及b)或在包含-camel-context.xml后綴文件的受支持的部署工件中進(jìn)行部署 c)可以通過(guò)RouteBilder和CDI集成與路由一起提供。
可以通過(guò)兩種不同的方式使用已定義的CamelContext:a) 通過(guò)Camel-CDI @ Injected或b)從JNDI樹(shù)訪問(wèn)。
示例上下文和路由
對(duì)于以下示例,我將使用上下文以及通過(guò)CDI和RouteBuilder提供的關(guān)聯(lián)路由。 它是一個(gè)應(yīng)用程序范圍的Bean,它隨應(yīng)用程序啟動(dòng)自動(dòng)啟動(dòng)。 @ContextName批注為CamelContext提供一個(gè)特定的名稱。
@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."));} }路線本身并不完全具有挑戰(zhàn)性。 它從direct:start中獲取一個(gè)空的消息正文,并從CDI bean方法“ sayHello”的輸出開(kāi)始添加前置字符串“ user”。 對(duì)此。 作為參考,完整的代碼可以在我的GitHub帳戶上找到 。 因此,我們接下來(lái)需要了解的是如何在各種Java EE組件規(guī)范中使用此路由。
從CDI使用駱駝
Camel從2.10版本開(kāi)始支持CDI。 在子系統(tǒng)之前和之外,需要對(duì)其進(jìn)行引導(dǎo)。 這不再是必須的,您只需在名稱中簡(jiǎn)單地@Inject即可在@Named CDI bean中使用已部署或定義的CamelContext:
@Inject@ContextName("cdi-context")private CamelContext context;在JSF,JAX-RS和EJB中使用駱駝
有了有關(guān)如何在CDI中使用CamelContext的知識(shí),您將假定,很容易從JSF等中進(jìn)行相同的操作。 這不是真的。 實(shí)際上,您不能將其注入綁定到JSF組件的ManagedBean甚至CDI Bean中。 另外,它在EJB中不起作用。 我沒(méi)有詳細(xì)研究它,但假定它與范圍有關(guān)。 一個(gè)合理的解決方法,實(shí)際上是一個(gè)更好的應(yīng)用程序設(shè)計(jì),是將完整的Camel邏輯放入單獨(dú)的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;} }通過(guò)ProducerTemplate接口,您可以通過(guò)各種不同的方式將消息交換發(fā)送到端點(diǎn),從而可以輕松地從Java代碼使用Camel Endpoint實(shí)例。 在這種特殊情況下,它只是開(kāi)始路由,并將String放入正文中,該String表示我正在使用它的組件的名稱。
CDI Bean充當(dāng)組件的后備bean,僅使用它:
@InjectHelloCamel helloCamel;public String getName() {return helloCamel.doSomeWorkFor("JSF");}返回字符串為“ Hello JSF user”。 這也將寫入WildFly服務(wù)器日志。 對(duì)于所有其他Java EE組件,最好使用相同的方法。
從EJB使用駱駝
如果您使用EJB作為man應(yīng)用程序組件模型,那么僅使用JNDI方法也是非常合理的:
CamelContext camelctx =?(CamelContext) inicxt.lookup("java:jboss/camel/context/cdi-context");Hawtio –駱駝控制臺(tái)
子系統(tǒng)中的另一個(gè)隱藏的寶石是Hawtio控制臺(tái)的捆綁。 它是一個(gè)用于管理Java內(nèi)容的模塊化Web控制臺(tái),并具有一個(gè)Apache Camel插件,可可視化您的上下文和路由。 請(qǐng)記住,它是自動(dòng)配置的安全性,您需要添加管理用戶才能訪問(wèn)它。
進(jìn)一步閱讀和幫助
- 在Freenode上與開(kāi)發(fā)人員交談
- WildFly-Camel子系統(tǒng)文檔
- GitHub上的WildFly Camel
- Apache Camel網(wǎng)站
翻譯自: https://www.javacodegeeks.com/2015/07/using-camel-routes-in-java-ee-components.html
java ee各類組件
總結(jié)
以上是生活随笔為你收集整理的java ee各类组件_在Java EE组件中使用骆驼路线的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: hibernate 别名_Hiberna
- 下一篇: java8默认垃圾收集器_Java 8中