kie-api_7.0上的新KIE持久性API

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

kie-api

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

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

相关文章

备抵附加账户的期末余额_备抵账户,附加账户和备抵附加账户的区别,分别有哪些会计科目,举例说明...

备抵账户又叫抵减账户&#xff0c;它是作为被调整对象原始数额的抵减项目&#xff0c;以确定被调整对象实有数额而设置的账户。备抵账户按被调整账户的性质和内容&#xff0c;又可分为资产类备抵账户和权益类备抵账户两类。(&#xff11;)资产类备抵账户①用途&#xff1a;资产…

vb6 判断打印机是否有效_吊打面试官 | 算法之如何判断括号是否有效?

今天要讲的这道题是 bilibili 今年的笔试真题&#xff0c;也是一道关于栈的经典面试题。经过前面文章的学习&#xff0c;我想很多朋友已经看出来了&#xff0c;我接下来要写的是一个关于「算法图解」的系列文章&#xff0c;中间可能会穿插少量的其他类型的文章&#xff0c;但「…

如何理解字符编码

一直有个困惑&#xff0c;为什么计算机系统搞那么多字符编码&#xff0c;就一个Unicode统一天下不就得了&#xff0c;后来看了篇文章&#xff0c;才多少理解一丁点。 英语的国家&#xff0c;只要一个字节就可以表示全部的字符&#xff0c;一个无符合的字节可以表示256个字符&a…

java bean 验证_Java Bean验证基础

java bean 验证这篇文章总结了一些简单&#xff0c;快速的示例&#xff0c;这些示例说明了您想使用Java Beans Validation API&#xff08;JSR 349&#xff0c;JSR 303&#xff09;进行的最常见操作。 记住&#xff0c;Beans Validation独立于Java EE。 尽管它是作为Java EE兼容…

框架下载_25. Scrapy 框架-下载中间件Middleware

1. Spider 下载中间件(Middleware)Spider 中间件(Middleware) 下载器中间件是介入到 Scrapy 的 spider 处理机制的钩子框架&#xff0c;您可以添加代码来处理发送给 Spiders 的 response 及 spider 产生的 item 和 request2. 激活一个下载DOWNLOADER_MIDDLEWARES要激活一个下载…

android activity 显示无焦点_Android面试题集锦之fragemnt

大家可以关注一下小编&#xff0c;小编以后会一直更新Android相关技术资料文章。创建方式静态创建首先我们需要创建一个xml文件&#xff0c;然后创建与之对应的java文件&#xff0c;通过onCreatView()的返回方法进行关联&#xff0c;最后我们需要在Activity中进行配置相关参数即…

IntelliJ IDEA for Mac 在eclipse(MacOS)模式下的快捷键

文章目录Mac键盘符号eclipse(MacOS)模式下的快捷键General 通用Debugging 调试Search/ Replace 查询/替换Editing 编辑Refactoring 重构Navigation 导航Usage Search 使用查询VCS/ Local History 版本控制/本地历史记录Live Templates 动态代码模板Other 官方文档上没有体现Mac…

java终结器_弃用Java的终结器

java终结器JDK-8165641 &#xff08;“ Deprecate Object.finalize”&#xff09;已打开&#xff0c;以“ deprecate Object.finalize&#xff08;&#xff09; ”&#xff0c;因为“ finalizer本质上存在问题&#xff0c;使用finalizer可能会导致性能问题&#xff0c;死锁&…

node 安装_VUE项目迁移之node.js的安装

【摘要】由于公司的项目需要迁移到VUE中去, 所以就用到了node.js, 这里简单整理了一下node.js的安装教程和环境变量的配置【作者】田鋆鹏Node.js 安装教程1. 在node.js的官网下载安装包下载地址1: https://nodejs.org/en/下载地址2: http://nodejs.cn/直接下载.msi的安装包即可…

jsp mysql servlet_JSP+Servlet+JDBC+mysql实现的学生成绩管理系统

本系统基于JSPServletMysql一个基于JSPServletJdbc的学生成绩管理系统。涉及技术少&#xff0c;易于理解&#xff0c;适合JavaWeb初学者学习使用。难度等级&#xff1a;入门技术栈编辑器Eclipse Version: 2019-12 (4.14.0)前端技术基础&#xff1a;htmlcssJavaScript框架&#…

IntelliJ IDEA for Mac 彻底卸载/彻底删除

删除 /Users/liaowenxiong/Library/Logs/目录下所有与 IntelliJ IDEA 相关的文件&#xff1a; cd /Users/liaowenxiong/Library/Logs/ rm -rf *intellij* rm -rf *IntelliJ* rm -rf *JetBrains* rm -rf *jetbrains*删除 /Users/liaowenxiong/Library/Preferences/目录下所有与…

春天猫rtsy_春天重试,因为冬天来了

春天猫rtsy好的&#xff0c;这实际上与冬天无关&#xff0c;众所周知&#xff0c;冬天已经到了 。 它与Spring Retry有关&#xff0c;Spring Retry是一个小的Spring框架库&#xff0c;它使我们可以向应重试的任何任务添加重试功能。 这里有一个很好的教程 &#xff0c;解释了如…

mariadb mysql 配置文件_MariaDB/MySQL配置文件my.cnf解读

MariaDB/MySQL的默认设置性能非常差&#xff0c;仅仅起一个功能测试的作用&#xff0c;不能用在生产环境中&#xff0c;因此要对一些参数进行调整优化。当然&#xff0c;对配置文件各参数的调整需要根据实际环境&#xff0c;不同时期不同数量级的数据进行性能优化。MySQL/Maria…

python字符串合并去重_015day--python集合和字符串

一、集合关系测试交集&#xff1a; 两个都有 .intersettion() 或用 & 符号差集&#xff1a; 列表a有&#xff0c;列表b没有 .difference() 或用 - 符号并集&#xff1a; 两列表合并&#xff0c;去重 .union() 或用 | 符号合并&#xff1a; .update() 会更改数据…

IntelliJ IDEA for Mac如何存取自定义快捷键配置文件

IntelliJ IDEA for Mac自定义的快捷键配置文件在以下的目录中&#xff1a; /Users/liaowenxiong/library/application support/JetBrains/IntelliJIdea2020.3/keymaps

react 事件处理_在React中处理事件

react 事件处理在使用React渲染RESTful服务后&#xff0c;我们创建了简单的UI&#xff0c;用于渲染从RESTful服务获取的员工列表。 作为本文的一部分&#xff0c;我们将扩展同一应用程序以支持添加和删除员工操作。 我们将通过添加/删除员工操作来更新react-app后端api&#x…

linux mysql 分区_Linux :linux磁盘分区(普通分区2T以内),安装免安装版mysql(tar.gz)...

1关闭防火墙&#xff1a;(依次运行 停止-->禁用)Centos7使用firewalld&#xff1a;启动&#xff1a;systemctl start firewalld查看状态&#xff1a;systemctl status firewalld停止&#xff1a;systemctl disable firewalld禁用&#xff1a;systemctl stop firewalld2官网下…

python 3d大数据可视化软件_十大顶级大数据可视化工具推荐

要使数据分析真正有价值和有洞察力&#xff0c;就需要高质量的可视化工具。市场上有很多产品&#xff0c;特点和价格各不相同&#xff0c;本文列出了一些广泛认可的工具。其实企业如何选择一个合适的可视化工具&#xff0c;并不是一件容易的事情&#xff0c;需要仔细的考虑。据…

IntelliJ IDEA 配置文件位置

1 IDEA 2020.1 以上 1.1 Win 语法&#xff1a; %APPDATA%\JetBrains\<product><version>Win上的APPDATA默认位置如下&#xff1a; C:\Users\用户名\AppData\Roaming例子&#xff1a; C:\Users\用户名\AppData\Roaming\JetBrains\IntelliJIdea2020.11.2 MacOS …

mysql 中间表的好处_Mysql中使用中间表提高统计查询速度

对于数据量较大的表&#xff0c;在其上进行统计查询通常会效率很低&#xff0c;并且还要考虑统计查询是否会对在线的应用产生负面影响。通常在这种情况下&#xff0c;使用中间表可以提高统计查询的效率&#xff0c;下面通过对session 表的统计来介绍中间表的使用&#xff1a;(1…