在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中使用骆驼

hello_jsf

有了有关如何在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插件,可可视化您的上下文和路由。 请记住,它是自动配置的安全性,您需要添加管理用户才能访问它。

AwsDockerReverseProxy

进一步阅读和帮助

  • 在Freenode上与开发人员交谈
  • WildFly-Camel子系统文档
  • GitHub上的WildFly Camel
  • Apache Camel网站

翻译自: https://www.javacodegeeks.com/2015/07/using-camel-routes-in-java-ee-components.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357390.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webpack入门

遇到问题首先到github项目的Issues中,检索一下相关问题,比在百度谷歌上直接搜索非官方解决方案好得多。 1、npm init 生成 package.json 2、npm i -D webpack 生成 # npm i -D 是 npm install --save-dev 的简写,是指安装模块并保存到 packa…

接口自动化 基于python+Testlink+Jenkins实现的接口自动化测试框架

基于pythonTestlinkJenkins实现的接口自动化测试框架 by:授客 QQ:1033553122 博客:http://blog.sina.com.cn/ishouke 欢迎加入软件性能测试交流QQ群:7156436 目录 1、 开发环境... 1 2、 主要功能逻辑介绍... 1 3、 框架…

this的指向

箭头函数:定义时所在的作用域(tip:继承而来 函数作用域 ) 普通函数:指向调用它的对象 箭头函数体内的 this对象,就是定义时所在的对象,而不是使用时所在的对象 1、箭头函数没有自己的this,ar…

事关每个程序员的职业规划与履历

今天,甚至过去,大多数人都是由自己来设计他们的职业生涯的。 无论你正要启程,还是已经奋斗多年,以下内容都会对您的职业生涯有所助益。 目录 几条重要的职业规划提示。 1. 学习的步伐不停止 2. 学会问、学会听,学会学习…

程序员应该如何规划自己的人生与书写履历?

今天,甚至过去,大多数人都是由自己来设计他们的职业生涯的。 无论你正要启程,还是已经奋斗多年,以下内容都会对您的职业生涯有所助益。几条重要的职业规划提示。1. 学习的步伐不停止 古人说,活到老,学到老。终身学习应该是您的座右铭。 世界在不断变化,每个人都在寻找各…

浅谈多线程——NSThread

上一篇文章中我们大致了解了GCD的模式和方法,在iOS开发中除了GCD之外,还有NSThread和NSOperation两种多线程方式。 1.NSThread - a - 使用NSThread开辟多线程进行子任务处理:类方法和初始化方法 使用类方法不需要创建对象就可以直接开辟多线程…

2021年程序员可以做哪些副业?

哈喽,大家好,我是孙叫兽,本期内容给大家分享程序员搞副业的一期节目,欢迎大家一起学习。 1.程序员为什么要做副业? 副业意味着自由 时至今日,仍然有一大群程序员还天真地认为从事副业是一种压迫。但事实是&…

学习Apache Camel –实时索引推文

在大多数软件开发项目中,有一点需要使应用程序开始与其他应用程序或第三方组件通信。 无论是发送电子邮件通知,调用外部api,写入文件还是将数据从一个地方迁移到另一个地方,您都可以推出自己的解决方案或利用现有框架。 对于Jav…

【坑】执行Consumer的时候发生java.net.UnknownHostException错误

【时间】: 2016/4/8 17:30 【问题】: kafka执行Consumer实例的时候,发生了一下错误。 kafka配置文件server.properties如下: zookeeper配置文件zoo.cfg内容如下: consumer的实现代码如下: 其中静态类的定义…

如何上架自己的应用到各大应用商店?

大家好,我叫孙叫兽,本期给大家分享的内容是如何上架自己的应用到应用商店,感谢大家的阅读!1.上架各大应用商店需要准备哪些材料?上架各大安卓应用商店(腾讯应用宝、阿里应用商店、百度手机助手、华为应用市…

时间复杂度和空间复杂度[数据结构]

參考:本文为小甲鱼教学视频的学习笔记。 1、为什么要学习时间复杂度和空间复杂度?你说一个算法好另外一个算法不好,有什么推断根据?哪个算法效率高?怎么推断?那么就要学习时间和空间复杂度了。思考&#xf…

js编码解码decodeURI()与decodeURIComponent()的区别

区别: encodeURIComponent()对/?:&$,#进行编码,encodeURI()不会 如果url的query和path传参中含有这些字符会被不正确的截断,拿到的参数会是错误的,一般都会用encodeURIComponent()进行编码、decodeURIComponent进行解码 en…

gitlab将分支代码合并到master上

1、首先在test分支上进行git add .git commit -m "test"git push 2、切换到master上git checkout mastergit merge test git push

堆栈跟踪 堆栈跟踪_过滤日志中无关的堆栈跟踪行

堆栈跟踪 堆栈跟踪我喜欢堆栈痕迹。 不是因为我喜欢错误,而是因为发生错误的那一刻,堆栈跟踪是无价的信息源。 例如,在Web应用程序中,堆栈跟踪向您显示完整的请求处理路径,从HTTP套接字到过滤器,Servlet&am…

VUE使用vue-seamless-scroll自动滚动表格数据,对表格数据排序无效的解决办法

使用vue-seamless-scroll循环表格数据,建议使用v-for,ul li 的形式便于操作属性,elemengt ui table可能不好处理兼容性问题及属性设置,尤其是一个页面添加多个表格及效果。 VUE : 排序 this.$refs.seamlessScroll.reset() 效果图

前端常见的加密算法介绍

一、前言 在信息安全越来越受重视的今天,前端的各种加密也变得更加重要。通常跟服务器的交互中,为保障数据传输的安全性,避免被人抓包篡改数据,除了 https 的应用,还需要对传输数据进行加解密。 目前常见的加密算法可…

一时冲动:“通往瓦尔哈拉之路的冒险”

通过所有有关Java 9和Project Jigsaw的讨论,我们不应忽视Java的另一重大变化。 希望在第10版或第11版中, Valhalla项目能够实现并介绍价值类型和专业化。 那么这是怎么回事,项目进展如何,面临什么挑战? 几天前&#x…

小程序分包

一、小程序分包 微信文档写的够清楚了 使用分包 | 微信开放文档 (1)常规分包注意点: 每个分包只能引用主包和自己的资源 (2) 独立分包注意点:特别麻烦 懒得用了吧 独立分包中不能依赖主包和其他分包中的内容 …

解决Sublime Text3莫名的中文乱码问题

有好几回用Sublime Text3写着中英混杂的文字的时候,会突然就弹出警告说什么编码不行,然后点击确定后,原来的中文全都乱码了: 然后即使按ctrlz撤回也没用,重新打开也没用,用记事本的转换ansi、unicode等方式…

try catch finally的用法

1、不使用try...catch出现异常后,后面的代码都不会运行了 login() {console.log(b);console.log(hhhhhhhh);}, 2、使用了try...catch出现异常后,try...catch后的代码还会继续运行 login() {try{console.log(b);}catch (e){console.log(e);}console.log…