有人要求我将遗留数据处理应用程序移植到 Java。
当前版本的系统由大量(写得不好的)Excel 表组成。这些工作表实现了一个大循环:轮询许多数据源。这些来源混合了 CSV 和基于 XML 的网络服务。
这个过程在概念上很简单:
它是无状态的,这意味着运行的计算完全取决于输入。计算结果已发布(目前通过在网络上的某些标准位置写入大量 CSV 文件)。
公布结果后,投票周期再次开始。
该过程不需要管理 GUI,但如果我可以实现某种基于 Web 的控制面板,那就太好了。它不会很漂亮,纯粹供内部使用。控制面板只会显示有关源提要的统计信息,并可能在出现问题时强制刷新输入提要。该组件在第一轮交付中完全是可选的。
该系统的一个关键特性是容错。一些输入提要是出了名的错误。我希望我的系统能够在某些输入损坏的情况下恢复。在这种情况下,不可能更新输出——我希望它继续轮询直到系统解决,可能会生成一些 XMPP 消息来指示系统的状态。总体而言,该系统应该可以在没有干预的情况下长时间运行。
用户目前有一个自定义客户端,它可以轮询(希望)不需要重写的 CSV 文件。如果我能正确地完成这项工作,那么他们将不会注意到运行该系统的引擎已被重新实现。
我不是 Java 开发人员(我主要开发 Python),但在这种情况下需要 JVM。经理给了我大量的学习时间。
我想知道的是如何开始构建此类项目。我想尽可能地使用框架和好的模式。是否有任何大的构建 block 可以帮助我使高质量的系统运行得更快?
UPDATE0:还没有人提到 Spring - 这个框架在这种应用程序中有作用吗?
最佳答案
您可以使用许多大型复杂框架来“帮助”您执行此操作。学习这些可以是CV++。
对于您的情况,我建议您尝试使系统尽可能简单。它将表现得更好并且更容易维护(它也更有可能工作)
所以我会接受每个要求并问问自己;我能做到多简单?这不是懒惰(你必须更努力地思考),而是恕我直言的良好做法。
关于java - Java 中长期运行的数据处理系统的通用架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9176235/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
GivenIamadumbprogrammerandIamusingrspecandIamusingsporkandIwanttodebug...mmm...let'ssaaay,aspecforPhone.那么,我应该把“require'ruby-debug'”行放在哪里,以便在phone_spec.rb的特定点停止处理?(我所要求的只是一个大而粗的箭头,即使是一个有挑战性的程序员也能看到:-3)我已经尝试了很多位置,除非我没有正确测试它们,否则会发生一些奇怪的事情:在spec_helper.rb中的以下位置:require'rubygems'require'spork'