java ee各类组件_在Java EE组件中使用骆驼路线
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放入正文中,该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项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- java ee开发环境_设置Java EE 6开发环境
java ee开发环境 本教程简要说明了如何设置典型的环境来开发基于Java EE 6的应用程序. 除了可以正常工作的Windows XP客户端具有足够的CPU能力和内存外,本教程没有其他先决条件. ...
- 在Java EE组件中使用骆驼路线
从现在开始我一直在与Camel合作,我真的很喜欢它的简单性. 在Java EE之上始终使用它一直是一个挑战,而我最近发表的有关如何做到这一点的演讲之一以及Java EE中引导Camel的不同方法实际上 ...
- java菜单如何点解_【Java】详解菜单组件
在这篇文章中,笔者会介绍Java图形界面编程中菜单组件的用法.关于菜单组件,因为java存在AWT编程和Swing编程,所以菜单组件也存在AWT菜单和Swing菜单.因为Swing组件使用的比较多,所 ...
- 京东java前后端联调_前端工程化、组件化实践JDM分享
前端技术原创文 前端工程化.组件化实践JDM分享 该文由孵化创新一部曾瑞文在研究院技术分享会的分享内容总结而成,主要讲解了团队创新的前端工程化.组件化的思想及实践应用. 为什么要搞前端框架? Java ...
- java jframe中添加组件_在java中用JFrame类创建的框架【1】直接添加组件
中直接组件换的转简述鱼类食性. 钢具广泛性.创建好的低碳韧性强度有较因此应用.塑. 添加包括0的等部界面分.主要3种化.爆炸聚合乙炔.氧原因引起分解是由.,,工作在(由器.钢消主要效果不锈温度间和及冷 ...
- java启动mysq服务_启动java服务器
Servlet Servlet担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层. Servlet是位于Web 服务器内部的服务器端的Java ...
- java技术专家学习路线图_向Java最佳专家的全球专家学习Java
java技术专家学习路线图 Java with the Best Virtual Conference是您学习微服务,Java 9,Kubernetes以及其他Java的指南! 将于4月17日至18日 ...
- JAVA解决实例问题_解决java方法
没有R.java问题找不到getActionBar()方法 android项目,可是项目中没有重要的R.java,并且报错,说是找不到getActionBar()方法,上网寻找原因,终于寻得解决方法: ...
最新文章
- cmd命令 安装本地服务器
- python3 x完全兼容_【转】Python3.x与Python2.x的主要区别 (O_O )?
- Python打包工具setuptools的使用
- YII2源码阅读:autoload_real.php 22~23行
- 成功解决AttributeError: module tensorflow has no attribute placeholder
- VSCODE更改文件时,提示:EACCES: permission denied的解决办法(ubuntu16.04虚拟机)
- ftp: connect: 没有到主机的路由_Qt之FTP上传/下载文件操作
- 在Windows Media Center中收听超过100,000个广播电台
- oracle10g的rat模拟,Oracle 10g Logminer 研究及测试
- 前端学习(2651):逻辑复用方式
- HTML5截取视频第一帧作为预览图片
- linux网络服务错误6026,wpa_supplicant/wpa_cli无法检测到接入点的错误密钥
- HTML 制作一个通讯录
- 毕业设计-论文写作笔记【毕设题目类型、论文写作细节、毕设资料】
- Android 视频裁剪 (含裁剪 View)
- 2017cad光标大小怎么调_怎么设置CAD中十字光标的长度
- 对“淡泊以明志,宁静以致远”的理解
- tan x x的matlab求解,matlab画x=tan(x)
- idv和vdi的优劣势_IDV和VDI区别
- 展会邀约 | 昂视与您相约BTF第12届上海锂电展