对于JRuby-on-Rails+;遗留Java代码?

对于JRuby-on-Rails+;遗留Java代码?,java,ruby-on-rails,database,activerecord,jruby,Java,Ruby On Rails,Database,Activerecord,Jruby,我们有一个中等大小的Java应用程序,需要进行一些重构 我们正在考虑迁移到JRuby on Rails。主要是因为RubyonRails提供的生产力,以及许多现有插件将重新实现web逻辑 然而,应用程序的很大一部分应该留在Java中,我们不想重写所有的业务逻辑(特别是因为它使用了许多Java技术,比如RMI) 重构的一个关键点是清理数据库管理,目前数据库管理是手工编码的SQL操作和存储在db4o中的一些对象的混合 从JRuby我们可以调用任何遗留java代码。太好了 然而,许多RubyonRai

我们有一个中等大小的Java应用程序,需要进行一些重构

我们正在考虑迁移到JRuby on Rails。主要是因为RubyonRails提供的生产力,以及许多现有插件将重新实现web逻辑

然而,应用程序的很大一部分应该留在Java中,我们不想重写所有的业务逻辑(特别是因为它使用了许多Java技术,比如RMI)

重构的一个关键点是清理数据库管理,目前数据库管理是手工编码的SQL操作和存储在db4o中的一些对象的混合

从JRuby我们可以调用任何遗留java代码。太好了

然而,许多RubyonRails插件都使用ActiveRecord来管理数据库。 从Java访问ActiveRecord数据似乎并不简单

在JRuby on Rails和遗留Java代码之间管理数据库的最佳策略是什么?

  • 我们可以将db4o用于所有事情,但是会失去一些rubyonrails插件的好处,需要在Ruby端“手动”管理对象
  • 我们可以将ActiveRecord用于一切,并在Java端定义某种冗余映射。哪一个是最好的策略
  • 我们将使用JavaORM技术(Hibernate、Cayenne?),然后在ActiveRecord中映射模型。这个想法与前一个相比如何
  • 我们能用Jruby 1.4变成java吗

你觉得怎么样

JRuby是一种很棒的语言,但它实际上是在Java虚拟机上运行的Ruby。在中集成遗留Java代码是可能的,但它不适合于核心语言

如果您对一种具有坚实web框架的新的动态语言感兴趣,我建议您查看和。Groovy构建在JVM上。您的遗留类可以是应用程序中的头等公民。我认为迁移到新的东西会容易得多,因为你可以重用你拥有的东西,重写你需要的部分。

供参考:O'Reilly的书《企业Rails》有一些关于制作你自己的Rails插件的好建议,这样你就可以找到/维护/重用你想出的任何技巧。胡思乱想:在O/R插件上制作,您可以选择使用它来放置在遗留java代码之上

或者,在数据库中创建一些魔术,允许旧java神奇地读取“新的和改进的!”ruby处理的结果?!?我假设一个具有视图、触发器和访问权限的数据库可以使用这种方法


祝你好运,我没有一个很好的答案,但我对你的答案很感兴趣。

除了用Ruby编写新代码外,你似乎还计划在Java方面进行大量重构。在这种情况下,我建议:

1) 选择JavaORM:Hibernate或db4o,并在所有Java重构中继续使用它。正如我想说的,一切都使用ActiveRecord,这里的底线是说服JRuby使用Java ORM要比强迫Java代码使用ActiveRecord对象容易得多

2) Hibernate和db4o至少都有Ruby接口的原型示例。找到一个让您开始,然后根据需要添加到它,以提供您需要的ORM功能


3) 不要担心需要ActiveRecord的Rails插件。并不是所有人都这样做,将来会更少,因为Rails 3(Rails和Merb的合并)将ActiveRecord解耦。即使有一个插件,你一定要有,它确实需要ActiveRecord,那又怎样?这只是Ruby代码。下载它,看看它期望什么,并为您的ORM创建一个facade类,以提供插件所需的方法。(在这里我们看到了Ruby的美丽——一个物体不一定是鸭子,只要它像鸭子一样闲逛和嘎嘎作响)。或者,您可以对插件进行修补以删除ActiveRecord依赖项,或者简单地实现插件自己提供的功能。你的情况可能决定了这些方法中哪些是有意义的。

在不知道很多细节的情况下,这是一个很难回答的问题

首先,完全可以不用ActiveRecord(AR)构建Rails应用程序。我做过几次——通常我使用控制器来运行脚本、读/写文件等,我相信这种方法是有效的。然而,由于数据库中肯定有数据要处理,所以要注意保持MVC方法,不管您的M是否为AR

如果数据库设计良好,则可以采用混合方法。例如,您的遗留Java可能使用任何ORM生成报告数据并将其写入DB,然后可以轻松地将这些表包装到ActiveRecord模型中,以便通过Rails应用程序显示报告。这完全取决于Java代码的功能和Rails代码的功能(同样,如果DB设计适合AR建模)

如果rails应用程序和java代码需要直接相互传递模型实例(即,与通过数据库传递相反),那么混合方法可能不起作用


我建议采取“试试看”的方法。试着做一些事情,看看你有多快陷入困境。在这种情况下,我觉得先在脑海中构建这一切并没有多大成效。

我已经尝试了Grails来解决我的问题,但它却失败了(我在尝试使用Wicket插件运行虚拟演示时,用户体验很差)。如果我要使用“rails”之类的东西,我宁愿使用“真正的rails”。我不需要jurby on rails遗留java集成是完美的。我只需要它“足够好”+1,该死的好问题:在不久的将来,我会毫不惊讶地看到更多这样的活动。