7.0上的新KIE持久性API

这篇文章介绍了即将到来的Drools和jBPM持久性api。 创建持久性api(不绑定到JPA)的动机是因为Drools和jBPM中的持久性直到7.0.0发行版才允许将替代性持久性机制与JPA完全集成。 尽管JPA是一个出色的api,但它与传统RDBMS模型紧密地结合在一起,并具有从那里继承的缺点-难以扩展,并且难以从不断扩展的系统上获得良好的性能。 使用新的api,我们可以集成各种通用的NoSQL数据库,并创建严格定制的持久性机制,以实现最佳性能和可伸缩性。

在撰写本文时,已经实现了几种实现-默认的JPA机制,Inifinispan和MapDB的两个通用NoSQL实现后端(将作为贡献提供),以及一个简短的量身定制的NoSQL实现,将在本文中简短讨论。

在Drools和jBPM持久性机制中所做的更改,其新功能以及如何为KIE组件构建全新的持久性实现,是即将添加新的MapDB集成实验模块的基础。 现有的Infinispan改编版已进行更改,以适应新的结构。

由于这种重构,除非我们的特定持久性实现基于JPA,否则我们现在可以在不依赖JPA的情况下为KIE提供其他持久性实现。 但是,它暗示了一组更改:

创建drools-persistence-api和jbpm-persistence-api

在版本6中,大多数持久性组件和接口仅存在于JPA项目中,在这些项目中必须从其他持久性中重用它们。 我们必须重构这些项目以重用这些接口,而不必每次都添加JPA依赖项。 这是一组新的依赖项:

<dependency><groupId>org.drools</groupId><artifactId>drools-persistence-api</artifactId><version>7.0.0-SNAPSHOT</version>
</dependency>
<dependency><groupId>org.jbpm</groupId><artifactId>jbpm-persistence-api</artifactId><version>7.0.0-SNAPSHOT</version>
</dependency>

关于此重构中的类的第一件事要提到的是,KIE组件用于KieSessions,WorkItems,ProcessInstances和CorrelationKeys的持久性模型不再是JPA类,而是一个接口。 这些接口是:

  • 持久会话
    :对于JPA实施,此接口由SessionInfo实施。 对于即将推出的MapDB实现,将使用MapDBSession。
  • 持久工作项
    :对于JPA实施,此接口由WorkItemInfo和MapDBWorkItem(对于MapDB)实现
  • PersistentProcessInstance
    :对于JPA实施,此接口由ProcessInstanceInfo和MapDBProcessInstance用于MapDB实施

重要的是,如果您正在使用JPA实现,并希望继续使用与以前相同的类,则可以使用它。 所有接口都准备好与这些接口一起使用。 这将我们带入下一个重点

PersistenceContext,ProcessPersistenceContext和TaskPersistenceContext重构

版本6中的持久性上下文接口取决于模型的JPA实现。 为了与其他持久性机制一起使用,必须对其进行重构以与运行时模型(分别为ProcessInstance,KieSession和WorkItem)一起使用,在本地构建实现,并且能够在其他组件的请求下返回正确的元素( ProcessInstanceManager,SignalManager等)

同样,对于TaskPersistenceContext之类的组件,在任务服务代码中使用了多个动态HQL查询,这些查询在其他持久性模型中无法实现。 为了避免这种情况,他们被更改为使用与标准更相关的特定机制。 这样,其他持久性机制可以以不同的方式使用不同的过滤对象,以创建所需的查询。

任务模型重构

当前任务模型关联任务和内容,评论,附件和截止日期对象的方式还取决于JPA存储该信息的方式,或更准确地说,取决于ORM关联这些类型的方式。 因此,如果需要,引入了任务持久性上下文接口的重构来为我们做组件之间的关系。 大多数方法仍然存在,并且仍然可以使用不同的表,但是如果我们只想使用Task将所有内容绑定在一起作为对象(NoSQL实现的方式),我们现在可以使用。 对于JPA实施,它仍然按ID关联对象。 对于其他持久性机制(如MapDB),它只需将子对象添加到任务对象中即可从内部索引中获取。

任务模型发生的另一件事是,之前,我们有不同的接口来表示彼此不兼容的任务(Task,InternalTask​​,TaskSummary等)。 对于JPA,这是可以的,因为它们将代表相同数据的不同视图。

但是总的来说,这种界面混合的背后动机是允许对基于表的存储进行优化,这绝不是一件坏事。 但是,对于非基于表的存储,这些优化可能没有意义。 使这些接口兼容可以实现从存储中检索到的运行时对象,以实现多个接口而不会破坏任何运行时行为的实现。 使这些接口兼容可以被视为第一步,进一步的改进将是使这些接口彼此延伸以强调模型并简化实现。

(但是对于其他类型的实现,例如MapDB,直接获得Task对象要比创建另一个对象便宜得多,如果接口要求,我们需要能够返回Task并使它作为TaskSummary工作。现在,所有接口都匹配相同的方法名称,以允许这样做。)

可扩展TimerJobFactoryManager / TimerService

在版本6上,TimerJobFactoryManager唯一可能的实现在构造中由TimeJobFactoryType枚举的值绑定。 进行了重构以扩展现有类型,以允许动态添加其他类型的计时器作业工厂

MapDB案例

如果需要,可以重新实现所有这些接口以创建完全不同的持久性模型。 对于MapDB,这正是完成的工作。 对于仍在审查中的MapDB实施,有三个新模块:

  • org.kie:drools-persistence-mapdb
  • org.kie:jbpm-persistence-mapdb
  • org.kie:jbpm-human-task-mapdb

旨在使用MapDB实现类来实现所有Task模型。 希望为KIE组件提供另一种类型的实现的任何人都可以按照以下步骤进行操作:

  1. 创建用于将持久性API项目与持久性实现机制依赖项混合的模块
  2. 基于给定的接口以及所有必要的配置和注释创建模型实现
  3. 创建自己的(Process | Task)PersistenceContext(Manager)类,以实现如何存储持久对象
  4. 使用所有必要的额外步骤来创建自己的管理器(WorkItemManager,ProcessInstanceManager,SignalManager)和工厂,以持久化模型。
  5. 创建您自己的KieStoreServices实现,该实现创建具有所需配置的会话,并将其添加到类路径中

您并不孤单:MultiSupport案例

MultiSupport是一家丹麦公司,已使用此重构来创建自己的持久性实现。 他们提供了一个归档产品,该产品专注于创建O(1)档案检索系统,并且对使用与档案相同的持久性机制来使内部流程正常工作非常感兴趣。

我们致力于实现一个可以增加大型数据库响应时间的实现。 鉴于其用于查找和检索数据的内部机制,他们能够创建具有数百万个活动任务的实现,而响应时间几乎没有降低。

在MultiSupport中,我们使用持久性api基于内部存储引擎创建了量身定制的商店-我们的动机是提供无限的可伸缩性,扩展的搜索功能,简单的分发以及我们通过JPA实现而难以实现的性能。 我们认为,这可以用作展示新的持久性api可以走多远的方式。 使用当前的JPA实现和专用的SQL Server,我们已经实现了每秒少于10个“启动过程”操作的初始性能,现在,随着即将发布的版本,我们在单个应用程序服务器上具有的性能
十倍以上

翻译自: https://www.javacodegeeks.com/2017/05/new-kie-persistence-api-7-0.html

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

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

相关文章

从客户的角度看网站涉及的第一要素

最近给某企业做了一个内部网站&#xff0c;界面风格、内容都是按照客户的要求进行了开发&#xff0c;测试阶段客户比较满意。投入试运行后&#xff0c;客户的领导级人物看了一眼首页中图片的大小&#xff08;600K&#xff09;&#xff0c;马上对我们的软件开发水平进行贬低。因…

linux ssl PHP,Linux环境安装Apache与PHP,支持SSL

1、Apache在如下页面下载apache的for Linux 的源码包http://www.apache.org/dist/httpd/;存至/home/xx目录&#xff0c;xx是自建文件夹&#xff0c;我建了一个wj的文件夹。命令列表&#xff1a;cd /home/wjtar -zxvf httpd-2.0.54.tar.gzmv httpd-2.0.54 apachecd apache./conf…

JBUILDER 2006怎么配置 STRUTS?[

建web工程时引入struts框架&#xff0c;选版本就可以了。jbuilder2006中有一个struts的可视化操作界面天极网有详细的图文资料,搜以下就可以找到关注首先新建项目然后选择Web选项,双击Web Module(WAR)创建一个Module&#xff0c;我感觉这个Web Module就相当于虚拟目录。然后可以…

dos命令查看oracle_home,Oracle - OraDb10g_home1配置方法+DOS命令

实验一(时间&#xff1a;2012.3.6)1实验项目名称&#xff1a;ORACLE 10G的安装、运行与配置2实验内容&#xff1a;a.检查ORACLE 10G安装的软硬件环境&#xff0c;安装服务器端软件和客户端软件&#xff1b;b.查看安装后的结果&#xff1b;c.启动与关闭监听服务、实例服务等&…

jhsdb:JDK 9的新工具

我喜欢在分析性能和其他基于Java的应用程序的其他问题的早期步骤中使用JDK随附的命令行工具&#xff0c;并在诸如jcmd &#xff0c; jps &#xff0c; jstat &#xff0c; jinfo &#xff0c; jhat和jmap &#xff0c; jrunscript &#xff0c; jstack之类的 工具上进行 博客撰…

purfer序列

prufer序列求法 对于一个无根无向图我们可以应用prufer序列操作使它缩成一个序列。 具体操作 一&#xff0c;每次选出来树中编号最小的点且度数为一&#xff08;即叶子节点&#xff09; 二&#xff0c;将与被删去的点相连的节点加入prufer序列中 重复一&#xff0c;二&#xff…

oracle11g高可用,oracle11g 搭建DG环境总结

本帖最后由 zhofly 于 2016-6-24 23:19 编辑测试环境为&#xff1a;两台服务器配置一样&#xff1a;Oracle Linux Server release 6.5 X86_64, DB 11.2.0.4.0前提环境&#xff1a;一台已经安装好数据库软件并创建数据库实例的服务器另一台也就是备库&#xff0c;只安装了数据…

树的计数(prufer序列 或 purfer序列)

题解 首先我们要知道一条性质&#xff0c;prufer序列中的某个点出现次数为该点在树中度数-1 感性理解一下&#xff0c;其实按照prufer序列求法自己推一下就出来了 设题目里给的度为$d[]$ 先将所有的d-- 然后按照排列组合得出来 这是多重集排列数 首先从n-2中选择d[1]个数是$C_{…

PHP 织梦 帝国那个好,帝国、PHPCMS及织梦对比(十):推荐位功能

网站中发布的文章除了需要按时间、栏目分类、类别调用外&#xff0c;往往需要根据编辑的推荐进行不同的调用&#xff0c;那么CMS自然少不了推荐位功能。一般推荐位的设计都有首页头条、首页幻灯焦点、首页推荐、栏目页推荐、列表页推荐、内容页推荐等&#xff0c;基本可以满足站…

声明对象 创建对象_流利的对象创建

声明对象 创建对象关于此主题的文章很多&#xff08;绝大多数&#xff09;&#xff0c;但我只是想贡献我的两分钱&#xff0c;并写一篇简短的文章&#xff0c;介绍如何使用Java中的Fluent Object Creation模式或对象构建器实例化Value Objects。 值对象是由其状态&#xff08;…

shell脚本之shellcode自动提取工具

最近一直在忙着写论文。突然领导又分配任务&#xff0c;帮写个自动提取shellcode的脚本工具。因为之前&#xff0c;我们都是用objdump查看后&#xff0c;把shellcode一个个添加进去&#xff0c;很麻烦&#xff0c;害怕写错。所以说我们写这个工具还是挺有必要的。首先我们要先了…

Apache Kafka流+机器学习(Spark,TensorFlow,H2O.ai)

我于2017年5月开始在Confluent工作&#xff0c;担任技术传播者&#xff0c;专注于围绕开源框架Apache Kafka的主题。 我认为机器学习是当今最热门的流行语之一&#xff0c;因为它可以在任何行业中增加巨大的商业价值。 因此&#xff0c;您还会从我这里收到有关Apache Kafka&…

dmp文件导入11oracle数据库,如何将dmp文件导入到自己的oracle数据库中

1、首先&#xff0c;我们可以先建立自己的一个用户表空间&#xff0c;创建表空间的格式如下&#xff1a;create tablespace test(表空间的名字)datafile D:\oracle\product\10.2.0\userdata\test.dbf (这边可以写成oracle的某个路径下)size 50m (初始大小)autoextend on;(自动…

NOIP模拟测试7「方程的解·visit」

visit 由于一些不可预知的错误导致我一直WA 错误最后说 思路 方案一 假设终点在出发点右上方&#xff08;这样假设只是为了方便&#xff09; 假设向左走了a步&#xff0c;向右下了b布&#xff0c;那么相应的我们要向右走ma&#xff0c;向上nb步 总步数t 所以由多重集方案数可得…

jsf绑定bean_JSF –渴望的CDI bean

jsf绑定bean每个人都知道JSF 2中热切的托管bean。 ManagedBean具有eager属性。 如果eager true并且范围是application&#xff0c;那么必须在应用程序启动时而不是在第一次引用该bean时创建此bean。 当您想在应用程序启动期间加载应用程序范围的数据&#xff08;例如&#xff0…

红旗系统linux忘了开机密码,红旗Linux6.0中忘记了root密码

很久很久以前&#xff0c;用虚拟机安装了red flag6.0windows xp 的双系统&#xff0c;很久很久以后&#xff0c;打开虚拟机red flag系统忘记了密码&#xff1a;在网上搜了下解决办法&#xff0c;转了先&#xff0c;不知管不管用&#xff01;

在网页中的flash游戏,按方向键浏览器的滚动条会跟着滚动

今天总算把这个困扰我N久的问题给解决了&#xff0c;在我的flash游戏《牧场物语》中有方向键操作&#xff0c;但是在按上下方向键的时候浏览器右边的滚动条跟着滚动&#xff0c;也一上一下的&#xff0c;弄的我头晕&#xff0c;还让不让人活啊&#xff0c;今天终于得到答案了。…

谁最终需要Java模块?

拼图问题为1000。我作为X想要JPMS模块。 如果不是平台开发人员&#xff0c;X是什么&#xff1f; 我的回答是X是人&#xff08;减去平台开发人员&#xff0c;因为那是一个条件&#xff09; 。 我们都需要模块系统具有更安全的代码&#xff0c;从而产生更可靠的系统&#xff0c;…

linux 删除带a的文件格式,linux基础命令练习题

2、如何通过命令行重启linux操作系统&#xff1f;shutdown -r now |reboot |init 63、如何在命令行中快速删除光标前的内容&#xff1f;ctrl uctrl k (删除光标之后的内容)5、设置/test/a.txt属主有读写执行权限&#xff0c;属组&#xff0c;有读写&#xff0c;其他账户无权限…

linux安全软件 腾讯,腾讯安全团队发现一存在24年的Linux 0day高危漏洞

腾讯安全团队近日向Linux社区提交了两个Linux X.25套接字漏洞&#xff0c;该漏洞可能造成权限提升&#xff0c;攻击者利用漏洞可能控制整个系统。漏洞风险等级为高&#xff0c;漏洞影响内核版本为2.1.16&#xff5e;5.9.8的Linux系统。目前这些漏洞尚未修复&#xff0c;漏洞细节…