Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中长期运行的数据处理系统的通用体系结构?_Java_Architecture - Fatal编程技术网

Java中长期运行的数据处理系统的通用体系结构?

Java中长期运行的数据处理系统的通用体系结构?,java,architecture,Java,Architecture,我被要求将一个遗留数据处理应用程序移植到Java 当前版本的系统由大量(写得不好的)Excel表格组成。这些工作表实现了一个大循环:轮询多个数据源。这些源是CSV和基于XML的web服务的混合 这个过程在概念上很简单: 它是无状态的,这意味着运行的计算完全依赖于输入。将发布计算结果(目前通过在网络上的一些标准位置写入大量CSV文件) 公布结果后,轮询周期再次开始 这个过程将不需要一个管理GUI,但是如果我能实现某种基于web的控制面板,它将是整洁的。这将不是什么漂亮的东西,纯粹是供内部使用。控制

我被要求将一个遗留数据处理应用程序移植到Java

当前版本的系统由大量(写得不好的)Excel表格组成。这些工作表实现了一个大循环:轮询多个数据源。这些源是CSV和基于XML的web服务的混合

这个过程在概念上很简单:

它是无状态的,这意味着运行的计算完全依赖于输入。将发布计算结果(目前通过在网络上的一些标准位置写入大量CSV文件)

公布结果后,轮询周期再次开始

这个过程将不需要一个管理GUI,但是如果我能实现某种基于web的控制面板,它将是整洁的。这将不是什么漂亮的东西,纯粹是供内部使用。控制面板只会对源提要执行dispay stats,并可能在出现问题时强制刷新输入提要。该组件在第一轮交付中完全是可选的

该系统的一个关键特性是容错。一些输入提要臭名昭著地存在bug。我希望我的系统能够在某些输入中断的情况下恢复。在这种情况下,不可能更新输出-我希望它在系统解析之前保持轮询,可能会生成一些XMPP消息来指示系统的状态。总的来说,系统应在长时间不受干预的情况下工作

用户目前有一个自定义客户端,用于轮询CSV文件(希望不需要重新写入)。如果我能正确地完成这项工作,他们将不会注意到运行此系统的引擎已重新实现

我不是java开发者(我主要做Python),但在这种情况下,JVM是必需的。经理给了我充裕的学习时间

我想知道的是如何开始设计这种项目。我希望尽可能使用框架和良好的模式。有没有什么大的构建块可以帮助我更快地运行一个高质量的系统


更新0:还没有人提到Spring——这个框架在这种应用程序中起作用吗?

你可以使用许多大型复杂框架来“帮助”你做到这一点。学习这些可以是CV++

在你的情况下,我建议你尽量简化系统。它将表现得更好,更易于维护(也更容易工作)

因此,我会考虑每一个要求,问问自己;我能做到多简单?这不是懒惰(你必须更努力地思考),而是良好的实践方法。

1)编写处理文件的代码,保持简单,每个任务一个类,你可能会发现简单和有用的方法。 2) 然后看看如何为这些类创建一个sperate进程运行程序作为单独的任务,如果它们出错,它可以重新启动它们。
3) 启动的最佳方法取决于平台,但我假设您提到的Excel表明它是windows PC。因此,最简单的解决方案是从windows->Startup菜单项运行process runner。一个稍微好一点的解决方案是使用一个替代方案,您可以在类似于

的情况下运行它,看看Pentaho ETL工具或Talend OpenStudio。

这些工具提供对文件、数据库等的访问。如果需要,您可以编写自己的插件或适配器。Talend创建可以编译和运行的Java代码。

Java生态系统中有一个工具,可以解决所有(几乎)集成问题

它被称为apachecamel()。它依赖于消费者和生产者的概念以及两者之间的企业集成模式。它提供容错和并发处理配置功能。支持定期轮询。它有用于XML、CSV和XMPP的组件。它很容易定义时间触发的后台作业,并与您喜欢的用于作业队列的任何消息传递系统集成


如果您从头开始编写这样的系统,将需要数周甚至数周的时间,而且您可能会错过一些错误条件。

对于CSV处理,我建议使用Spring批处理。我在@Martin Spamer的回答中提到了Spring。