在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
在WildFly上将JPA和CDI Bean与骆驼一起使用相关推荐
- jpa 忽略bean_在WildFly上将JPA和CDI Bean与骆驼一起使用
jpa 忽略bean 我并没有真正为此计划,但是在一个免费的会议月份中,我有机会进行了一些深入的探讨,并向您展示了WildFly-Camel子系统提供的WildFly魔术上的更多Camel. 商业背景 ...
- jsf绑定bean_JSF –渴望的CDI bean
jsf绑定bean 每个人都知道JSF 2中热切的托管bean.@ ManagedBean具有eager属性. 如果eager ='true'并且范围是application,那么必须在应用程序启动时 ...
- JSF –渴望的CDI bean
每个人都知道JSF 2中热切的托管bean.@ ManagedBean具有eager属性. 如果eager ='true'并且范围是application,那么必须在应用程序启动时而不是在第一次引用该 ...
- java ee cdi_Java EE CDI bean范围
java ee cdi Java EE平台的上下文和依赖注入(CDI)是一项功能,有助于将Java EE平台的Web层和事务层绑定在一起. CDI是一组服务,可以一起使用,使开发人员可以轻松地在Web ...
- Java EE CDI bean范围
Java EE平台的上下文和依赖注入(CDI)是一项功能,可帮助将Java EE平台的Web层和事务层绑定在一起. CDI是一组服务,可以一起使用,使开发人员可以轻松地在Web应用程序中使用企业bea ...
- ejb+jpa_使用Arquillian(包括JPA,EJB,Bean验证和CDI)测试Java EE 6
ejb+jpa 很长时间以来,我听到很多人对Arquillian说好话 . 尽管我一直在阅读有关其用法的文章,但实际上我无法在一篇文章中找到涵盖我认为重要的某些方面的文章. 当然,我看起来还不够努力. ...
- 使用Arquillian(包括JPA,EJB,Bean验证和CDI)测试Java EE 6
很长时间以来,我听到很多人对Arquillian说好话 . 虽然我一直在阅读有关其用法的文章,但实际上我无法在一篇文章中找到涵盖我认为重要的某些方面的文章. 当然,我看起来还不够努力. 我要讲的要点是 ...
- php cdi_使用Fabric8在CDI管理的bean中注入Kubernetes Services
php cdi 序幕 我在Kubernetes中最喜欢的是发现服务的方式. 为什么? 主要是因为用户代码不必处理注册,查找服务,也没有网络意外(如果您曾经尝试过基于注册表的方法,那么您就会知道我在说什 ...
- 使用Fabric8在CDI管理的bean中注入Kubernetes Services
序幕 在Kubernetes中我最喜欢的就是发现服务的方式. 为什么? 主要是因为用户代码不必处理注册,查找服务,也没有网络意外(如果您曾经尝试过基于注册表的方法,那么您就会知道我在说什么) . 这篇 ...
最新文章
- javaScript中的事件对象event是怎样
- java设置access-allow_Java Web如何设置多个Access-Control-Allow-Origin
- C#资源文件与与资源名称字符串之间的互相转化
- 【放置奇兵】算法 PVE总结
- 深圳上海场 | 神策 2019 数据驱动大会「PPT 下载」新鲜出炉!
- 手机安装(Fiddler)证书
- Hadoop学习记录(4)|MapReduce原理|API操作使用
- 第四期 | 带学斯坦福CS224n自然语言处理课+带打全球Kaggle比赛(文末重金招募老师!)...
- MySQL创建用户报错 -- ERROR 1396 (HY000): Operation CREATE USER failed for ‘user_name‘@‘localhost‘
- JDK可视化工具 | JConsole操作指南,手把手教会你
- 【python教程入门学习】python入门:来来来,每天10点定时签到拿京豆啦
- 蓝桥杯 ADV-84 算法提高 图形输出
- Gartner报告:2010年全球安全软件市场增长11%
- Swoole MySQL 连接池的实现
- docker安装tomcat8
- C语言回溯算法求幂集,回溯求幂集算法
- 黑马程序员python入门学习笔记
- 工厂模式简介和应用场景
- 网盘的暴力营销,你们的脸遮遮掩掩
- 数学建模_数学模型的分类数学建模十大算法
热门文章
- Echarts报错:Component series.lines not exists. Load it first.
- Feign数据压缩传输
- 图的广度优先算法+遍历
- 双向链表的(CRUD)
- 19年8月 字母哥 第一章 spring boot 2.x基础及概念入门 这里全部看完了 热部署没出来 第二章在前面2页 用热点公司网不行
- php 错误提示开启,php开启与关闭错误提示,php开启错误提示_PHP教程
- cas 登录之后不跳转_图解JWT如何用于单点登录
- 关于es查询dsl的filter与must,term与match的区别
- web项目的创建和发布
- qa/qc_专业QA如何实施可靠的CI / CD管道?