在WildFly上将JPA和CDI Bean与骆驼一起使用

我并没有真正为此计划,但是在一个免费的会议月份中,我有机会进行了一些深入的探讨,并向您展示了WildFly-Camel子系统提供的WildFly魔术上的更多Camel。

商业背景

该演示来自Christina Lin在JBoss Demo-Central上的演示 。 她演示了Camel中File和JDBC连接器的用法,还添加了Spilled模式和Exception处理方法的用法。 该演示的场景是模拟银行帐户之间的交易过程。 输入是一个包含多个事务的批处理XML文件。 这些可以是现金存款,现金提取或银行帐户的转账信息。 根据交易的类型,它们会被散布起来,并且每笔交易都会从数据库中检索相关信息,进行交易并计算交易费用,然后再将其放回数据库中。

  • 您可以在GitHub上找到完整的原始源代码 。

我为什么触摸它

原因:我实际上不想考虑新的业务案例。 而且,不仅仅是在技术层面上向您展示一些细腻的细节。 因此,我认为仅从克里斯蒂娜(Christina)那里获得成功就是一个捷径。 其次,她正在基于Karaf并使用XML DSL进行路由定义的Fuse中做所有事情。 我只是一个可怜的Java人,并且学会了讨厌XML。 另外,她正在使用几个组件,而我在Java EE上下文中不会使用。

先决条件–部署应用程序

在开始演示之前,请确保已将WildFly 8.2.0.Final与WildFly-Camel子系统补丁2.2.0一起安装 。 现在,可以将我的github帐户上的演示存储库派生到您选择的目录中。 它不过是带有一些其他依赖项的Maven Java EE 7项目。 只要做一个:

mvn clean install

并将生成的target / javaee-bankdemo-1.0-SNAPSHOT.war部署到WildFly服务器。

此示例中没有任何UI,因此您基本上必须观看日志文件并在其中复制xml文件。 src \ main \ in-data文件夹包含bank.xml,您需要将其复制到standalone \ data \ inbox文件夹中。 第二步完成,骆驼开始了。

客户状态

一切都始于标准的Java EE应用程序。 实体CustomerStatus保存帐户信息(ID,VipStatus,余额)。 它还具有一些NamedQueries。 看起来完全不是骆驼特有的。 WildFly用作默认数据库的内存中H2数据库在三个脚本的帮助下进行了预填充,这三个脚本在persistance.xml中配置为架构生成属性。 我在这里与两个客户一起工作,分别是A01和A02。

骆驼和Java EE

骆驼路线

在这种情况下,骆驼自举非常简单。 BankRouteBuilder具有@ContextName(“ cdi-context”)批注,它本身是应用程序范围内的启动bean,其中包含小演示所需的所有路由。 随时重新阅读并了解其他可能的选项,以部署/配置路由 。 hawt.io控制台(http:// localhost:8080 / hawtio /)很好地显示了它们。 该应用程序有五条路线。

ReadFile是第一个,它基本上仅准备好xml文件,并将各个条目( 由xPath表达式拆分 )推入processTransaction路由。

这个决定是“现金”交易还是“转移”交易。 分别以“ direct:doTransfer ”或“ direct:processCash ” 结尾 。 我将所有原始xml路由定义留在BankRouteBilder中作为注释。 如果您搜索特定的解决方案,可能会有所帮助。

保险丝演示的差异

Christina经常使用Camel JDBC组件 。 它完成了所有繁重的工作,甚至完成了初始的数据库设置。 这是我们在任何地方都不想做的事情,尤其是在Java EE环境中,在该环境中我们可以使用所有JPA magic。 实际上,有一个Camel JPA componente ,但是它非常有限,并且不真正支持NamedQueries或类似名称。

解决此问题的一种非常有效的方法是使用具有所有bean绑定的Camel Bean组件和已经集成的cdi组件。 所有数据库访问都通过CustomerStatusService进行管理。 基本上,这是一个@Named bean,它注入了EntityManager并知道如何加载CustomerStatus实体。 只需在bean端点中引用它即可将其注入到RouteBuilder中:

.to("bean:customerService?method=loadCustomer")

我同意,幕后发生了很多魔术,而CustomerStatusService依赖于Camel类这一事实是我不喜欢的另一件事。 但这可以通过将服务@ Inject-注入路由并以类似方式引用来轻松解决。 我决定不这样做,因为我想让Christina演示的最初流程保持活力。 她经常与交易所合作,并依赖它们。 因此,我更接近她的榜样。

关于交易的话

我实际上在此示例中使用扩展的持久性上下文,并将服务中的updateCustomer方法标记为@Transactional 。 这是一种将完整和更新的CustomerStatus实体合并回数据库的非常简单的方法。 整个doTransfer路由现在都不是事务性的。 即使第二个客户不在系统中,该金额仍将从第一个客户帐户中提取。 我想在稍后的阶段和单独的博客文章中介绍。

现在就这样。 享受您的周末,并与Camel和WildFly Camel子系统一起玩。 很高兴通过@myfear或在博客文章中发表评论来接收您的想法或问题。

翻译自: https://www.javacodegeeks.com/2015/07/using-jpa-and-cdi-beans-with-camel-on-wildfly.html

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

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

相关文章

C#开发微信公众平台-就这么简单(附Demo)(转)

原文:http://www.cnblogs.com/xishuai/p/3625859.html 写在前面 阅读目录: 服务号和订阅号URL配置创建菜单查询、删除菜单接受消息发送消息(图文、菜单事件响应)示例Demo下载后记最近公司在做微信开发,其实就是接口开发…

【ECharts系列|03可视化大屏】大数据管理平台实时展示

基于echats实现可视化大数据管理平台实时展示。 完整htmlcssjsjsonfontvideo:https://download.csdn.net/download/weixin_41937552/16362433 项目结构&#xff1a; index.html <!DOCTYPE html> <html lang"en"> <head><link href"css/Bi…

【ECharts系列|04可视化大屏】ECharts可视化经典案例总结

收集整理一些ECharts实现可视化大屏效果的一些经典案例&#xff0c;方便在工作的时候及时的响应客户&#xff0c;及修改展示&#xff0c;根据业务需求在此基础修改即可。 第一篇为Echarts入门文档&#xff0c;如果没有Echarts基础&#xff0c;理解起来比较费劲&#xff0c;这个…

云服务器带宽如何计算,云服务器怎么选择带宽

原标题&#xff1a;云服务器怎么选择带宽很多企业或站长在购买云服务器时&#xff0c;对带宽不是很了解。他们认为硬件配置高就行&#xff0c;访问速度就会快。其实访问快慢主要是带宽大小来决定&#xff0c;硬件主要是用来运算的&#xff0c;带宽是用来传输数据的。服务器处理…

spring aop实践_使用Spring AOP实现活动记录模式

spring aop实践在课堂设计过程中&#xff0c;我们应就每个班级的职责分配做出决定。 如果我们选择的不错&#xff0c;系统将更易于理解&#xff0c;维护和扩展。 我们几乎所有的项目都有一个持久层&#xff0c;即关系数据库&#xff0c;文档存储或仅XML文件。 通常&#xff0c;…

部署promethues采集kubelet数据报错:server returned HTTP status 403 Forbidden

背景 笔者尝试部署手动部署promethues去采集kubelet的node节点数据信息时报错 笔者的promethus的配置文件和promthues的clusterrole配置如下所示&#xff1a; apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata:name: prometheus rules: - apiGroups: […

2k16显示miui停止服务器,MIUI11停止内测,MIUI12真的来了,与小米MIX4同天发布,与ios13一样流畅丝滑...

原标题&#xff1a;MIUI11停止内测&#xff0c;MIUI12真的来了&#xff0c;与小米MIX4同天发布&#xff0c;与ios13一样流畅丝滑根据miui官方给出的最新公告&#xff0c;现在miui11最后一个开发版基本停止内测&#xff0c;并称“永远相信美好的事情即将发生”&#xff0c;可以确…

设计之路:如何进行软件需求分析?

1、需求分析的重要性 软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。 通常&#xff0c;软件生存周期包括可行性分析与开发项计划、需求分析、设计&#xff08;概要设计和详细设计&#xff09;、编码、测试、维护等活动。 常用的三种软件生命周期&a…

wadl 生成java_在Spring MVC REST应用程序中自动生成WADL

wadl 生成java上一次我们学习了WADL的基础知识 。 语言本身并没有那么有趣&#xff0c;只写了一篇有关它的文章&#xff0c;但是本文的标题揭示了为什么我们需要这些知识。 JSR 311的许多实现&#xff1a;JAX-RS&#xff1a;RESTful Web服务的Java API提供了开箱即用的运行时WA…

安卓应用和ios应用下载地址生成一个统一二维码

前言&#xff1a;这个需要自己的应用已经上线到腾讯应用宝、APPStore.终极解决办法腾讯应用宝「微下载 」&#xff0c;是目前生成二合一APP推广二维码的最佳方式。原因如下1. 微信仅支持应用宝「微下载」&#xff0c;才能直接下载APP● 微信拥有11亿用户量&#xff0c;“扫一扫…

程序员应该如何才能买房?

前段时间对象问我应该在哪买房&#xff0c;我的意见是现在一个小的城市搞个刚需房&#xff0c;后面可以再换个一线的大房子&#xff0c;后来她的建议是在工作附近搞一套&#xff0c;这样不用一边工作一边还房贷。无奈只能咨询各位大咖。看完这个大佬的经历&#xff0c;发现好多…

小程序开发从0到1

公司最近也想做小程序&#xff0c;简单梳理了一下&#xff0c;希望能给新人带来一点启发。 话不多说&#xff0c;直接上干货。 不是码农也想开发的直接采用混合式开发的方案&#xff0c;查漏补缺&#xff0c;用模板肯定会有点生硬&#xff0c;想走的更远建议还是采用原生开发的…

javaScript入门基础说明

JavaScript 教程 JavaScript 是 Web 的编程语言。 所有现代的 HTML 页面都使用 JavaScript。 JavaScript 非常容易学&#xff0c;本教程将教你打开 JavaScript 的大门 浏览器中的 JavaScript 能做什么&#xff1f; 现代的 JavaScript 是一种“安全”语言。 它不提供对内存…

ActiveMQ作为Logstash的消息代理

扩展Logstash时&#xff0c;通常会添加一个消息代理&#xff0c;该消息代理用于在一个或多个Logstash节点处理传入消息之前临时缓冲传入的消息。 数据通过像Beaver这样的发运人推送到代理&#xff0c; Beaver读取日志文件并将每个事件发送到代理。 或者&#xff0c;应用程序可以…

在编译器中鼠标光标变成下横线的解决办法

适用于各种智能编译器&#xff0c;HB-X,VSCode,ST3,IDEA等。 问题&#xff1a; 按一下键盘上的&#xff0c;insert 键。

java自定义序列化_Java中的自定义国际化(i18n)

java自定义序列化国际化&#xff08;i18n&#xff09;在我们的软件项目中非常重要。 它主要带来以下好处&#xff1a; 将UI字符串外部化为代码文件以外的外部文件&#xff0c;以及易于管理的UI内容。 支持多种语言。 在这篇文章中&#xff0c;将为Eclipse和Java项目提供一个i…

让一个文字在背景图片水平居中的方法

最近工作中在做那个可视化大屏&#xff0c;图中用到了大量的装饰图片&#xff0c;下面看一下文字怎么在图片中水平居中。 这个方法比较好用&#xff0c;其他的方法嵌入太多可能不是特别好使&#xff0c;尤其嵌入到多个框架中。 html <!DOCTYPE html> <html><h…

Objective-C中,ARC下的 strong和weak指针原理解释

Objective-C中&#xff0c;ARC下的 strong和weak指针原理解释 提示&#xff1a;本文中所说的"实例变量"即是"成员变量"&#xff0c;"局部变量"即是"本地变量" 一、简介 ARC是自iOS 5之后增加的新特性&#xff0c;完全消除了手动管理内…

elementui去掉表格所有边框

/deep/.el-table {border: 0;th,tr,td{border: 0;background-color: #fff;}&::before {height: 0px;}&::after {width: 0;}.el-table__fixed:before {height: 0;}}

前端-html、css

HTML一、html简介超级文本标记语言是标准通用标记语言下的一个应用&#xff0c;也是一种规范&#xff0c;一种标准&#xff0c;它通过标记符号来标记要显示的网页中的各个部分。网页文件本身是一种文本文件&#xff0c;通过在文本文件中添加标记符&#xff0c;可以告诉浏览器如…