- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
首先,如果stackoverflow上已经有像我这样的问题,很抱歉,但我还没有找到它。其实我不知道我可以使用什么标签来搜索我需要的解决方案。
基本上,我需要一个工具/软件,它可以在整个过程中使用多个工具/操作来管理数据(对象)流。当然,现有的 BPM/工作流平台工具之一可能可以做到这一点,但它们似乎对我的要求来说太复杂了。
我有一个用 JPA/Hibernate 构建的“静态”数据模型。然后我需要更改该静态模型以便对其使用不同的处理功能。该函数可以是一些 java 类、web 服务或外部应用程序(支持批处理模式)。之后我需要捕捉这些函数的输出并进行一些可视化,绘制一些图表等。我可以假设所有这些处理功能都可以访问静态模型,并且它们可以将其更改为特定的模型,因此无需将输入传递给它们。另一方面,它们的输出应该被主要的“工作流管理器”捕获。
还有一件事,整个过程应该在没有任何用户交互的情况下自动运行(也许将来会改变,但现在看起来和呈现)。在流程开始之前,管理员应该定义使用哪个“处理功能”,仅此而已。还有一件事...最好是在数据库状态更改时触发整个过程,但这并不重要,我可以通过调用 Web 服务来启动它。
问题是:我应该使用现有的 BPM/Workflow 工具之一,例如 jBPM 或 Activiti,自己编写一个简单的“工作流管理器”,还是使用比 jBPM/Activiti 简单得多的现有工具(是否有任何?)。当然,我更喜欢最简单的方法...
非常感谢任何反馈。
最佳答案
Apache Camel 是一个开源集成框架,可在这方面为您提供帮助。
您可以使用 Apache Camel构建您自己的简单工作流管理器,其中每个流程实现 Processor .您的数据可以使用 Camel 传递给处理器 Exchange .查看 Camel examples想要查询更多的信息。
有关如何编写自定义处理器的信息,请阅读 here .
您可以动态地将处理器添加到 Camel RouteBuilder,使用 Quartz Scheduler 安排它等等,这将或多或少地满足您的所有需求。
这是对 Camel 的很好介绍:http://www.kai-waehner.de/blog/2012/05/04/apache-camel-tutorial-introduction/
使用 Camel 的 Workflow Manager 的简单实现:
WorkflowManager.java
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
public class WorkflowManager {
DefaultCamelContext camelContext;
public WorkflowManager() {
camelContext = new DefaultCamelContext();
RouteBuilder routeBuilder = new RouteBuilder() {
@Override
public void configure() throws Exception {
from("timer:schedule?period=1s&daemon=true").process(new ProcessOne()).process(new ProcessTwo());
}
};
try {
camelContext.addRoutes(routeBuilder);
} catch (Exception e) {
e.printStackTrace();
}
}
public void start() throws Exception {
camelContext.start();
}
public void stop() throws Exception {
camelContext.stop();
}
public static void main(String[] args) {
WorkflowManager workflowManager = new WorkflowManager();
try {
workflowManager.start();
while(true) {
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
ProcessOne.java
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
public class ProcessOne implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
System.out.println("In ProcessOne");
}
}
ProcessTwo.java
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
public class ProcessTwo implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
System.out.println("In ProcessTwo");
}
}
我使用 Camel 2.9.0 版来编译这段代码。请注意,我在 main 方法中使用了无限循环来保持主线程处于 Activity 状态。
此代码将运行具有 ProcessOne 和 ProcessTwo 的路由,周期为 1 秒。您可以在 from(...) 方法中看到我将处理器添加到路由构建器的时间段。因此,这条路线将反复运行。另外,我不想传输任何数据。可以在各个处理器的process方法中使用exchange进行数据流转。
输出将是:
In ProcessOne
In ProcessTwo
In ProcessOne
In ProcessTwo
您可以使用 camel 组件来使您的 WorkflowManager 健壮。
关于java - 简单的基于 java 的工作流管理器/数据工作流,能够启动分机。应用程序,调用网络服务等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11842587/
我正在使用 Java 编写一个时钟程序,该程序能够“滴答作响”,但它存在问题。我认为它与 getter 和 setter 或 toString() 方法有关。 计数器类 package clock;
const Index = () => { // Ref Links const frefLinks = { 1: useRef(1), 2: useRef(2), 3: useRef(3
所以我读了here不能 pickle 装饰函数。确实: import multiprocessing as mp def deco(f): def wrapper(*args, **kwarg
我在go1.11.2 linux/amd64 版本。当包godog使用 go get github.com/DATA-DOG/godog/ 安装,godog 可执行文件在 $GOPATH/bin/中创
如何正确压缩字符串,以便 PHP 能够解压缩? 我试过这个: public static byte[] compress(String string) throws IOException {
我们这里的问题是表明 在测试中使用 Kleene 代数。 在 b 的值由 p 保留的情况下,我们有交换条件 bp = pb;两个程序之间的等价性简化为等式 在 b 的值不被 p 保留的情况下,我们有交
我有一个与我的网络相关的非常奇怪的问题,我在具有多个接口(interface)的 VirtualBox 上安装了 RDO Grizzly OpenStack。 虚拟盒子: eth0 - managem
我正在尝试使用 Passport.js授权谷歌OAuth2在 Node.js .我整个星期都在尝试让它工作,但不知道为什么它不工作,所以现在我求助于 stack 寻求一些潜在的帮助。我已经尝试了所有在
我是一名优秀的程序员,十分优秀!