BPM 引擎与 BPM 引擎服务器
BPM Engine vs BPM Engine Server
我正在研究工作流概念,特别是 BPMN 标准。我最感兴趣的是有关该主题的可用软件。
我已经研究过像Activiti和jBPM这样的软件,它们都是在Java中实现的。尽管他们很棒,但我正在寻找其他东西。尽管这样的软件自称为 BPM Engine
,但我宁愿将它们命名为 BPM Engine Servers
。它们是独立的服务器(具有基于 Web 的 GUI),这使得很难将它们嵌入到其他服务器中。
现在我的问题是:有没有像 BPM Engine
这样的概念,它只用给定的数据执行给定的 BPM,只有一步?没有任何 GUI 或直接用户交互(类似于图书馆)?我应该搜索什么?它叫什么名字?我的期望有效吗?
[更新]
我花了最后几个小时研究 Activiti 的用户指南。我仍然不确定我是否可以按照我想要的方式使用它!如果有人能证实,我将不胜感激。
我对类似控制台的应用程序很感兴趣,我可以随时 运行 为它提供先前的 运行ning 进程(很可能序列化为字符串)。引擎应该根据给定的历史构建流程。
一旦流程被重建,我想通过告诉它发生了什么来将它向前推进一步。然后它应该通知我下一个要执行的任务并关闭。
最后,我将把更新后的进程存储为字符串(引擎应该以某种方式对其进行序列化,以便稍后反序列化)。
我不希望引擎有自己的数据库或内存存储。我希望它在完成后完全关闭。这就是我所说的 Engine
,没有用户交互,没有存储访问。
任何 BPM 引擎都能以这种方式执行吗?
也许我没有理解你的意思,但 Activiti 实际上只不过是一个可以嵌入到任何其他 java 应用程序中的 jar 文件。当然,为了以任何有意义的方式 运行 Activiti,您需要一个支持数据存储(数据库)和一个或多个流程定义,但正如您从作为 Activiti 一部分的单元测试中看到的那样,数据库可以在内存中并且流程定义可以包含在 war 中。有许多将 Activiti(可能还有 jBPM)用作没有暴露的 UI 或用户交互的简单嵌入式状态机的示例。
我的公司已经为不同的组织实施了许多这样的解决方案。
如果我没有理解您的意思,请随时举例说明您的要求,我相信我们曾经解决过这个问题。
您可能对 Bonita BPM 感兴趣。
这个开源 BPM 解决方案提供了一个可以独立使用的执行引擎。
与其竞争对手一样,它也以基于 Web 的应用程序形式提供可选的 GUI:Bonita Portal。
我认为你想要做的事情的挑战是大多数 BPM 引擎将流程的 定义 与 执行 .因此,对于它们中的大多数,您需要某个地方可以让您长期存储定义(通常是数据库),然后它们会为您跟踪该定义的给定实例的状态。
如果您想要一个真正无状态的 BPMN“解释”引擎,那么您的序列化数据不仅必须包括流程的当前状态,还必须包括流程定义。我相信这是可以做到的,但我认为没有任何引擎采用这种方法,因为这样做会增加解决方案的复杂性,并解决了一个似乎没有多少人问过的问题。
此外,它回避了一个问题“假设我们现在有一个进程知道它在执行什么任务,如何实际执行该任务?”在我见过的大多数解决方案中,任务的执行发生在与引擎相同的服务器上。在某些执行采用不同技术的地方,“执行者”根本不了解流程,除了调用信号“好的,这件事完成了”,然后引擎处理接下来发生的事情。您希望将此数据放入某种序列化数据结构中,因此会出现“如果我们有这个无状态 BPMN 引擎,任务的执行者是否必须更新序列化数据以指示任务的状态更改” .
我认为 BPMN 规范的其他要求会使您的方法变得非常困难,例如如何处理在移动流程之前等待特定时间或消息的中间消息事件等项目向前。虽然所有这些都可能得到解决,但肯定需要大量 re-engineering 当前方法。
我正在研究工作流概念,特别是 BPMN 标准。我最感兴趣的是有关该主题的可用软件。
我已经研究过像Activiti和jBPM这样的软件,它们都是在Java中实现的。尽管他们很棒,但我正在寻找其他东西。尽管这样的软件自称为 BPM Engine
,但我宁愿将它们命名为 BPM Engine Servers
。它们是独立的服务器(具有基于 Web 的 GUI),这使得很难将它们嵌入到其他服务器中。
现在我的问题是:有没有像 BPM Engine
这样的概念,它只用给定的数据执行给定的 BPM,只有一步?没有任何 GUI 或直接用户交互(类似于图书馆)?我应该搜索什么?它叫什么名字?我的期望有效吗?
[更新]
我花了最后几个小时研究 Activiti 的用户指南。我仍然不确定我是否可以按照我想要的方式使用它!如果有人能证实,我将不胜感激。
我对类似控制台的应用程序很感兴趣,我可以随时 运行 为它提供先前的 运行ning 进程(很可能序列化为字符串)。引擎应该根据给定的历史构建流程。
一旦流程被重建,我想通过告诉它发生了什么来将它向前推进一步。然后它应该通知我下一个要执行的任务并关闭。
最后,我将把更新后的进程存储为字符串(引擎应该以某种方式对其进行序列化,以便稍后反序列化)。
我不希望引擎有自己的数据库或内存存储。我希望它在完成后完全关闭。这就是我所说的 Engine
,没有用户交互,没有存储访问。
任何 BPM 引擎都能以这种方式执行吗?
也许我没有理解你的意思,但 Activiti 实际上只不过是一个可以嵌入到任何其他 java 应用程序中的 jar 文件。当然,为了以任何有意义的方式 运行 Activiti,您需要一个支持数据存储(数据库)和一个或多个流程定义,但正如您从作为 Activiti 一部分的单元测试中看到的那样,数据库可以在内存中并且流程定义可以包含在 war 中。有许多将 Activiti(可能还有 jBPM)用作没有暴露的 UI 或用户交互的简单嵌入式状态机的示例。 我的公司已经为不同的组织实施了许多这样的解决方案。 如果我没有理解您的意思,请随时举例说明您的要求,我相信我们曾经解决过这个问题。
您可能对 Bonita BPM 感兴趣。 这个开源 BPM 解决方案提供了一个可以独立使用的执行引擎。 与其竞争对手一样,它也以基于 Web 的应用程序形式提供可选的 GUI:Bonita Portal。
我认为你想要做的事情的挑战是大多数 BPM 引擎将流程的 定义 与 执行 .因此,对于它们中的大多数,您需要某个地方可以让您长期存储定义(通常是数据库),然后它们会为您跟踪该定义的给定实例的状态。
如果您想要一个真正无状态的 BPMN“解释”引擎,那么您的序列化数据不仅必须包括流程的当前状态,还必须包括流程定义。我相信这是可以做到的,但我认为没有任何引擎采用这种方法,因为这样做会增加解决方案的复杂性,并解决了一个似乎没有多少人问过的问题。
此外,它回避了一个问题“假设我们现在有一个进程知道它在执行什么任务,如何实际执行该任务?”在我见过的大多数解决方案中,任务的执行发生在与引擎相同的服务器上。在某些执行采用不同技术的地方,“执行者”根本不了解流程,除了调用信号“好的,这件事完成了”,然后引擎处理接下来发生的事情。您希望将此数据放入某种序列化数据结构中,因此会出现“如果我们有这个无状态 BPMN 引擎,任务的执行者是否必须更新序列化数据以指示任务的状态更改” .
我认为 BPMN 规范的其他要求会使您的方法变得非常困难,例如如何处理在移动流程之前等待特定时间或消息的中间消息事件等项目向前。虽然所有这些都可能得到解决,但肯定需要大量 re-engineering 当前方法。