我正在为我的宠物项目创建UI配置工具。该工具的一个方面使最终用户可以定义他的编排。然后,我需要将此编排定义保存到数据库中。在运行系统中将有此定义的可执行版本。可执行版本是动态创建的。

想法是分开 定义可执行 版本,我可以灵活地选择BPMN或JPDL或基于POJO的工作流解决方案(BeanFlow)之间的运行时版本。

局限性: :我无法使用诸如JBPM,Activiti等框架之类的BPMN编辑器,因为我不使用自己的UI,而不是我自己的域名UI。

我需要有关如何持续定义的建议。

  1. 我应该使用RDBMS表吗?如果是这样,我可以借用与编排概念接近的DB模式吗?

  2. 我应该将定义序列化到BPMN/JPDL XML实例文档吗?

  3. 还有其他我可以使用的简单格式吗?

有帮助吗?

解决方案

通过“编排”,我假设您的意思是 有限状态机. 。当前国家决定可以遵循哪些过渡到其他州的地方。国家和过渡作为边缘和顶点的表示通常会产生一个 定向无环图, 但是,有时该图会循环(例如草稿 - 提交批准 - >未决批准 - 拒绝 - >草稿)。

在实践中,将定义与执行要求分开,要求持久格式可以轻松适应自定义。随着系统的发展,您会发现许多意外的边缘案例,这些案例不需要更改持久性架构,只有代码。这意味着XML或NOSQL解决方案 - 其模式很容易更改或不存在的东西。

现在,为此目的编写了我自己的XML定义(出于毫无兴趣的原因,我将排除在外),我的建议是使用JPDL(或BPMN)。原因是他们的定义可能会包含您现在正在考虑的任何内容,将来将来并启用自定义 - 例如在给定点挂起任意数据或行为。您还获得了已经构建的工具(不仅仅是UI)的优势,以处理周期检测,并确保有一个完成途径。

我知道JPDL拥有的一些有趣的功能是帮助合并分叉过程,定时任务(包括定期重复的任务)以及发送通知的设施的能力。最后一项 - 通知 - 还需要进一步的博览会。我在自己的系统中发现的一件事是,需要发送可配置的电子邮件,其内容基于流通的数据。这些现有的发动机通过提供一种将插件变量插入文本中的方法相对简单的,然后在传输前在运行时间进行动态评估。他们还提供引擎和任何用户存储之间的桥梁,目的是向人群发送通知,任务并执行安全策略。

最后,根据系统的范围,您可能仍会使用数据库。我建议将XML存储,并以序列化格式安排数据。然后,如果数据在执行过程中随着数据而被更改,请将数据的序列化(如果也更改为工作流程),也可能会将其写入历史/审核日志表中。

其他提示

我不会使用RDBMS表,或者如果您这样做,请将定义存储为文本斑点。试图制作定义的记录是一个坏主意,因为随着时间的流逝,它更加僵化和难以更改定义。许多人会使用不同的方法,但是我会使用JSON或YAML,并避免使用XML。这样做的动机是使其尽可能简单。尝试使用XML,尤其是XML的正式特定格式,将使您花更多的时间满足确切的规范,实际上并没有做任何事情来帮助您尝试完成的工作。从代码的角度来看,JSON和YAML都很容易使用。 YAML更容易被人类阅读,并且更容易编辑,并且不像JSON那样棘手。 JSON的使用更广泛,并且比YAML小。如果要关注文档大小,JSON也有二进制文件BSON。

一旦您拥有从内部对象到数据格式的进口商/出口商,那么使用RDBMS或其他机制持续存在,将是简单的。您甚至可以使用CouchDB,这可以为您的应用提供其他好处,并且可能非常合适。

很好的问题!这是我的两分钱:

  1. RDBMS: :如果这样做,您将能够查询工作流程实例,例如,哪些令牌位于'node x'?
  2. 存储 XML 作为clob:简单性是该解决方案的真实性,但是您不能真正查询这些解决方案,只是通过ID获取它们
  3. nosql: :对于不同问题有很多不同的解决方案。 mongodb 是一种流行的解决方案,它提供了面向文档的持久性。

例如,使用例如使用组合UI的简单序列化 Xstream 然后将序列化位存储在数据库中,作为二进制列。然后,当用户登录时,获取关联的数据,必不可少的,如果需要时进行初始化并显示。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top