我被要求将遗留数据处理应用程序移植到Java上。
系统的当前版本由(错误编写的)Excel工作表的nubmer组成。工作表实现了一个大循环:轮询了许多数据源。这些源是CSV和基于XML的Web服务的混合。
这个过程在概念上很简单:
它是无状态的,这意味着运行的计算完全取决于输入。发布计算结果(目前通过在网络上的某些标准位置写入大量CSV文件)。
发布结果后,轮询周期再次开始。
这个过程不需要管理员GUI,但是如果我可以实现某种基于Web的控制面板那么它会很简洁。对于内部使用来说,这将是非常漂亮和纯粹的。控制面板只会执行有关源源的调度统计信息,并且可能会在出现问题时强制刷新输入源。该组件在第一轮交付中纯粹是可选的。
该系统的一个关键特性是容错。一些输入源是众所周知的错误。我希望我的系统能够在某些输入被破坏的情况下恢复。在这种情况下,无法更新输出 - 我希望在系统解析之前继续轮询,可能会生成一些XMPP消息来指示系统的状态。总体而言,该系统应该在没有长时间干预的情况下工作。
用户目前有一个自定义客户端,用于轮询CSV文件(希望)不需要重写。如果我能够正确地完成这项工作,那么他们就不会注意到运行该系统的引擎已经重新实现。
我不是java devloper(我主要做Python),但JVM是这种情况下的要求。经理给了我大量的学习时间。
我想知道的是如何开始构建这种项目。我想利用框架和&好的模式可能。是否有任何重要的构建块可以帮助我更快地运行高质量的系统?
UPDATE0:还没有人提到Spring - 这个框架在这种应用程序中是否可以发挥作用?
答案 0 :(得分:3)
您可以使用许多大型复杂框架来“帮助”您执行此操作。学习这些可以是CV ++。
在您的情况下,我建议您尝试使系统尽可能简单。它会表现更好,更容易维护(它也更有可能工作)
所以我会考虑每个要求并问自己;我能做到这么简单吗?这不是懒惰(你必须更加努力),而是恕我直言。
答案 1 :(得分:1)
1)编写处理文件的代码,每个任务保持简单一个类,您可能会发现Apache CSV和Apache Commons很有用。 2)然后查看Java Thread Pools为这些类创建一个sperate进程运行器作为单独的任务,如果它们出错它可以重新启动它们。 3)启动的最佳方法取决于平台,但我会假设您提到的Excel表明它是Windows PC。因此,最简单的解决方案是从Windows-> Startup菜单项运行流程运行器。一个稍好的解决方案是使用windows service wrapper或者你可以在Apache ACD
之类的地方运行答案 2 :(得分:1)
Java生态系统中有一个工具可以解决所有(几乎)集成问题。
它被称为Apache Camel(http://camel.apache.org/)。它依赖于消费者和生产者以及企业集成模式之间的概念。它提供容错和并发处理配置功能。有定期民意调查的支持。它具有XML,CSV和XMPP的组件。可以很容易地定义时间触发的后台作业,并与您喜欢的任何消息系统集成以进行作业排队。
如果您要从头开始编写此类系统,则需要数周和数周的时间,但您仍可能会错过一些错误情况。
答案 3 :(得分:0)
查看Pentaho ETL工具或Talend OpenStudio 此工具提供对文件,数据库等的访问。如果需要,您可以编写自己的插件或适配器。 Talend创建了可以编译和运行的Java代码。