在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组件中使用骆驼路线相关推荐
- java ee各类组件_在Java EE组件中使用骆驼路线
java ee各类组件 从现在开始我一直在与Camel合作,我真的很喜欢它的简单性. 在Java EE之上使用它一直是一个挑战,我最近发表了一篇关于如何做到这一点的演讲,而在Java EE中引导Cam ...
- 在 Java EE 组件中使用 Camel Routes
2019独角兽企业重金招聘Python工程师标准>>> 摘要:你可以通过集成 Camel 和 WildFly 应用服务器(使用 WildFly-Camel 子系统)在 Java EE ...
- rest服务swagger_在Java EE 7上骑骆驼–带有Swagger文档的REST服务
rest服务swagger 骆驼开箱即用. Swagger集成就是其中之一. 不幸的是,大多数已经存在的功能都严重依赖于Spring. 但这并不能阻止我们在普通的Java EE 7应用程序中使用它们, ...
- 在Java EE 7上骑骆驼–带有Swagger文档的REST服务
骆驼开箱即用. Swagger集成就是其中之一. 不幸的是,大多数已经存在的功能都严重依赖于Spring. 但这并不能阻止我们在普通的Java EE 7应用程序中使用它们,因为有时它只是服务器的轻量级 ...
- Java EE 7中包含哪些JSR?
我开始填写所有应该加入Java EE 7的Java规范请求的表. 由于平台版本仍在确定中,因此某些细节很难确定. 完整的Java EE 7 EJB产品具有以下标准组件和API: 名称 版 描述 JSR ...
- react api_使用Java EE 8中的React式API加速服务
react api 服务通常可以通过异步处理进行优化,即使不改变其对外界的行为. 某些服务效率不高的原因是,它们需要等待其他服务提供结果才能继续下去. 让我们看一下如何在不等待外部REST服务的情况下 ...
- 使用Java EE 8中的反应式API加速服务
服务通常可以通过异步处理进行优化,即使不改变其对外界的行为. 某些服务效率不高的原因是,它们需要等待其他服务提供结果才能继续下去. 让我们看一下如何在不等待外部REST服务的情况下调用它们,并独立进行 ...
- js ajax 访问java函数,将url分配给Java EE项目中的ajax(js)函数
我正在Ajax中尝试使用我的第一个项目,并且在分配指向要从服务器中获取的文件的绝对URL时遇到问题.将url分配给Java EE项目中的ajax(js)函数 这是我的函数: function fetc ...
- java ee组件的类型_CDI(Weld)高级7JavaEE环境组件资源
1. Defining a resource CDI规范使用术语资源是指,一般地,以下列任何一种类型的对象,在Java EE组件环境可能是可用的: JDBC Datasources, JMS Queu ...
最新文章
- php连接Mysql
- android web3j 代币查询_wallet-eth 以太坊代币钱包 助记词 私钥 keystore 转账
- Docker 容器技术 — Swarm 集群
- c++中的list用法
- NoSQL(一):NoSQL数据库、redis
- 所有controller interceptor_filter、interceptor、aspect不知如何选择
- 那些年干过的事(六)—无源码修改版本号
- ffmpeg 推流同时录像命令_ffmpeg推流命令
- linux句柄过大导致无法登陆
- Microsoft SQL Server Compact 4.0ADO.NET Entity Framework 4.1MVC3
- jpa原生query_Spring Data Jpa @Query原生SQL
- 条款一:尽量使用const、inline而不是#define
- 我经常逛的技术网站,个个经典
- ZZULIOJ-1007鸡兔同笼
- 机电一体化柔性生产线加工系统
- 你距离哈佛学霸到底有多远?实力证明,真正的学霸精神不是智商,而是。。。
- Tair ldb(leveldb存储引擎)实现介绍
- Python海龟绘图入门篇
- 三星优化器 适用于绝大部分安卓手机 超级好用!!
- Git删除本地多个分支
热门文章
- 【程序员】保持一颗虚心好学的心态去敲代码
- “小朋友”们节日快乐呀~
- SpringMVC对Ajax请求的处理
- python统计段落单词词频_使用Python统计文件中词频,并且生成词云
- (转)如何查看java本地方法
- (精华)转:RDD:创建的几种方式(scala和java)
- 奇技淫巧:在spring官网上下载历史版本的spring插件,springsource-tool-suite
- XML——StAX Streaming API for XML(read+write)
- Mybatis报错:nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘XXX‘ not found
- java8默认内存收集器_使用正确的垃圾收集器将Java内存使用量降至最低