jpa 忽略bean_在WildFly上将JPA和CDI Bean与骆驼一起使用

jpa 忽略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

jpa 忽略bean

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

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

相关文章

【如何系统地学习 C++ 语言】关于C++,有哪些你需要提前知道的知识?

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删C是一种通用的、面向对象的编程语言,可用于开发操作系统、游戏、图形用户界面、后端以及高性能系统和应用程序。所以,尽管…

【如何系统地学习 C++ 语言】从开发环境到C++进阶,应该怎么办?

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删开发环境如前面介绍的那样,C属于一种静态的编译型语言,所以,开发环境配置过程中就需要用到对应的编译器。C有…

高度可定制化的方案_如何开发高度可定制的产品

高度可定制化的方案您是否听说过:“我们非常喜欢您的产品……除了一些小细节。”? 然后,CIO推出了一系列其他“必备”要求的清单,其中有数百个要添加到您的惊人产品中。 您是否听说过,甚至说过:“团队&…

文言文编程?厉害了程序员!

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删你能看出来,这首诗妙在哪里吗?来源:量子位(ID:QbitAI),梦晨 萧…

sublime快捷键代码对齐_Python配置sublime运行环境

1、下载安装python和sublime,不再赘述,官网即可下载;2、打开subilme,打开Tools > Build System > New Build System..3、点击New Build System后,会生成一个空配置文件,在这个配置文件内覆盖配置信息…

C语言贪心算法

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删01基本概念贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,…

C++最佳实践 | 可维护性

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删C最佳实践:1. 工具2. 代码风格3. 安全性4. 可维护性(本文)5. 可移植性及多线程6. 性能7. 正确性和脚本可维护性避免使用编…

springboot启动自动关闭_App自动化测试用例格式和App的启动与关闭

【一】基本的用例格式这里使用unittest测试框架来编写用例。注:unittest可以提供用例的组织和管理、预期结果验证、批量化运行、产生测试报告等功能。新建一个calculator的python package,新建一个calculator_test.py,导入以下包。按照标准的…

C++最佳实践 | 可移植性及多线程

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删C最佳实践:1. 工具2. 代码风格3. 安全性4. 可维护性5. 可移植性及多线程(本文)6. 性能7. 正确性和脚本可移植性明确使用的…

eap aka_使用API​​密钥(aka身份验证令牌)部署到Maven Central

eap aka如何在不使用未加密本地密码的情况下与Maven Central / Nexus通信(尤其是使用Gradle,但不仅限于此)。 基本原理 不幸的是,Gradle(和许多其他构建工具)没有提供任何机制来本地加密密码(或…

万维网发布服务 w3svc 已停止 除非万维_万维网和互联网的区别

常见的一个误解是,人们认为互联网(Internet,也叫因特网)和万维网(World Wide Web)是同样的事物。一些词语如“互联网”、“万维网”,“网”和“网络”经常可以交替使用。但是,从技术的角度来说,“互联网”和“万维网”是两个独立的…

C/C++项目开发:通讯录管理系统源码,C语言链表实现

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删hello,各位小伙伴们大家好!你们今天有敲代码嘛?如果有熟悉的小伙伴看到我,就知道又可以来学习源码…

javafx窗体程序_JavaFX真实世界应用程序:欧洲电视网广播联盟

javafx窗体程序我荣幸地与今年在德累斯顿Saxonia 系统公司工作的Alexander Casall一起在JavaOne上展示了多个JavaFX Real-World应用程序。 在准备本次演讲时,我们向客户和合作伙伴发送了一份调查表,并向他们询问了一些与他们的项目,他们的应用…

spring 数据库 链接db2_Druid,Java语言中最好的数据库连接池

Druid是Java语言中最好的数据库连接池,这话不是我说的,是Druid官方文档自己这样描述的,这是何等的自信!连接池的作用,跟线程池的作用大同小异,都是为了减少频繁的创建销毁连接IO,提升性能。drui…

编程知识:既然已经有数组了,为什么还要链表?

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删对于不少开发者而言,链表(linked list)这种数据结构既熟悉又陌生,熟悉是因为它确实是非常基础的数据结构,陌生…

jcache_随机JCache内容:多个提供程序和JMX Bean

jcacheJCache(JSR 107)是用于缓存的Java标准…足够了。 没有更多介绍性的东西。 这是一则速成文章,内容涉及 多个JCache提供程序配置,以及 功能:通过JMX Mbeans的JCache统计信息 管理多个JCache提供程序 如果您只使…

python webbrowser点击_用 Python 实现手机自动答题,这下百万答题游戏谁也玩不过我!...

引言如果谈到这几年手机上各平台最常见的引流福利,必然是答题赢大奖系列小游戏了。像什么头号英雄,百万玩家之类的,充斥在我们生活中,同时也成为了我们生活中常见的娱乐方式。但是有时候就会想,能不能实现手机自动答题…

程序员的年终总结,各种版本各种残

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删朱自清版这几天心里颇不宁静了,眼看上线的日子越来越临近,而项目Bug之多,密密的交叉着,却无从改起…

securecrt哪个版本好用_电脑跑分测试软件哪个好?好用的电脑跑分软件推荐

想要直观的了解自己电脑状况,那么一款好用的电脑跑分软件无疑是必不可少的,毕竟他能够将测试结果用跑分的形式计算出来。那么,电脑跑分软件哪个比较好呢?下面是小编分享的好用的电脑跑分软件推荐,游戏玩家们可不要错过…

C语言,单片机绕不过的坎,你对C语言内存分配了解多少呢

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删一、static在C语言里面可以用来修饰变量,也可以用来修饰函数。1、 先看用来修饰变量的时候。变量在C语言里面可分为存在全局数据区、…