vis*_*ary 4 java workflow dataflow data-processing
首先,如果在stackoverflow上已经存在类似我的问题,抱歉,但我还没有找到它.实际上我不知道我可以使用什么标签来搜索我需要的解决方案.
基本上,我需要一个工具/软件,可以在整个过程中使用多个工具/操作来管理数据(对象)流.当然,现有的BPM /工作流平台工具之一可能会这样做,但它们似乎对我的要求来说过于复杂.
我有一个用JPA/Hibernate构建的"静态"数据模型.然后我需要更改该静态模型,以便在其上使用不同的处理函数.该函数可以是一些java类,Web服务或外部应用程序(支持批处理模式).之后,我需要捕获这些函数的输出并进行一些可视化,绘制一些图表等.我可以假设所有这些处理函数都可以访问静态模型,并且可以将其更改为特定的模型,因此不需要将输入传递给他们.另一方面,它们的输出应该由主"工作流程管理器"捕获.
还有一件事,整个过程应该在没有任何用户交互的情况下自动运行(可能将来会改变,但现在看起来和现在).在流程开始之前,管理员应该定义使用哪个"处理功能",就是这样.另一件事......最好的情况是,如果整个过程在数据库状态发生变化时被触发,但这并不重要,我可以通过调用Web服务来启动它.
问题是:我应该使用现有的BPM /工作流工具之一,如jBPM或Activiti,自己编写一个简单的"工作流管理器",或使用比jBPM/Activiti(有没有?)简单得多的现有工具. .当然我更喜欢最简单的方法......
非常感谢任何反馈.
Apache Camel是一个开源集成框架,可以帮助您实现这一目标.
您可以使用Apache Camel构建自己的简单工作流管理器,其中每个流程都实现处理器.您的数据可以使用camel Exchange通过处理器传递.查看驼峰示例以获取更多信息.
有关如何编写自定义处理器的信息,请阅读此处.
您可以动态地将处理器添加到Camel RouteBuilder,使用Quartz Scheduler等安排它,这将或多或少地满足您的所有要求.
以下是骆驼的好介绍: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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
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");
}
}
Run Code Online (Sandbox Code Playgroud)
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");
}
}
Run Code Online (Sandbox Code Playgroud)
我使用Camel版本2.9.0来编译此代码.请注意,我在main方法中使用了一个无限循环来保持主线程的活动.
此代码将运行具有ProcessOne和ProcessTwo的路由,周期为1秒.您可以在from(...)方法中查看句点,其中我将处理器添加到路径构建器.因此,这条路线将反复运行.此外,我不是试图流动任何数据.您可以在每个处理器的处理方法中使用exchange来传输数据.
输出将是:
In ProcessOne
In ProcessTwo
In ProcessOne
In ProcessTwo
Run Code Online (Sandbox Code Playgroud)
您可以使用camel组件来使WorkflowManager健壮.