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是一种通用的、面向对象的编程语言,可用于开发操作系统、游戏、图形用户界面、后端以及高性能系统和应用程序。所以,尽管…

python rsa加密之后byte类型存储到数据库中_python3 rsa加密

遇到了跟你一样的问题。 此js封装的源码 如下。希望看到的大神解决了的话帮我一下。/*RSA, a suite of routines for performing RSA public-key computations in JavaScript.Copyright 1998-2005 David Shapiro.Dave Shapirodaveohdave.comchanged by Fuchun, 2010-05-06fcrpg…

jdk 11 模块系统_JDK 9:模块系统状态的重点

jdk 11 模块系统马克雷因霍尔德 ( Mark Reinhold )的“模块系统状态 (SOMS)”已于本月初发布,它提供了信息丰富的可读性“对Jigsaw项目中原型的Java SE平台进行了增强的非正式概述,并被提议作为JSR 376的起…

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

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

小学生在家自学python_小学生都能学会的python(函数)

小学生都能学会的python(函数)神马是函数函数: 对功能或者动作的封装函数的定义def 函数名(形参列表):函数体(return)ret 函数名(实参列表)函数的返回值return,只要执行到return 函数的本次调用就会被停止1.如果函数不写return, 没有返回值。…

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

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

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

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

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

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

C语言贪心算法

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

spark有什么作用_Spark 101:它是什么,它做什么以及为什么起作用

spark有什么作用最近,许多大数据的讨论都使用了新名称。 有人认为流行的新手Apache Spark ™是Hadoop的更易访问,更强大的替代品, Hadoop是大数据的首选原始技术。 其他人则认为Spark是Hadoop和其他技术的有力补充,它具有自己的优…

python中比较运算符怎么使用_实例说明Python中比较运算符的使用

下表列出了所有Python语言支持的比较操作符。假设变量a持有10和变量b持有20,则:例如:试试下面的例子就明白了所有的Python编程语言提供的比较操作符:#!/usr/bin/pythona 21b 10c 0if ( a b ):print "Line 1 - a is equal…

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

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

rx.observable_使用Java 8 CompletableFuture和Rx-Java Observable

rx.observable我想探索一个使用Java 8 CompletableFuture和Rx-Java Observable的简单分散聚集场景。 场景很简单–产生大约10个任务,每个任务返回一个字符串,最终将结果收集到一个列表中。 顺序的 其顺序版本如下: public void testSequen…

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…