0

背景:我有一个可供许多开发人员访问的 java 库 - 通常通过 java。但是,一些开发人员希望通过 Ruby API 访问它。为了实现 Java-Ruby API,我倾向于 Jruby 的方向。

问题:

  1. 我主要担心的是这些开发人员将无法在他们当前的 Ruby on Rails 开发框架中使用 API;而是必须在 Jruby 的 rails 环境中运行。会是这样吗?

  2. 也许我错过了 Jruby 和 Ruby on Rails 之间的联系。但是看起来你既可以在 Rails 中工作,也可以在 Jruby 的 rails 中工作——这在技术上是两种不同的开发环境吗?

我真的很感激有人能对此有所了解..

编辑:强迫开发人员(实际上是客户更具体)对其项目进行重大更改以适应此 API 并不是一个真正的选择。那么,如果他们的 Rails 应用程序必须转换为 Jruby on Rails 应用程序,那么也许有人可以为我提供另一种选择(除了 Jruby)?

4

2 回答 2

1

首先,我应该提一下,Ruby on Rails 只是简单的 Ruby 代码,同样的代码可以在 JRuby 环境(在 JVM 上)或 MRI(用 C 编写)运行时中运行。

但是,只有 JRuby 可以加载 Java 类并使用 Java API。要求您的客户将他们的部署环境切换到 JRuby 可能不可行,但如果您可以在 Java 中设置一个支持 XML 或 JSON 的服务,那么他们将能够轻松地从 Rails 中使用它。

于 2010-07-30T02:20:01.017 回答
1

您可能会发现类似问题的答案很有帮助。根据您的应用程序,可能可以无缝移植您的 RoR 应用程序以在 JRuby 上运行,但须遵守该答案中指出的警告。但是您需要确保这样做的好处平衡了努力和潜在风险。

或者,您可以考虑将这些 Java 库设施作为构建在 JRuby 上的内部 Web 服务(可以是 Rails 或 Sinatra 或类似服务)提供给您的 MRI Rails 应用程序。这样你就可以解耦元素并降低项目的风险。如果您随后对这种工作感到满意,那么您可能会考虑将它们重新组合在一起,如果有意义的话,所有这些都在 JRuby-on-Rails 下。

更新:应提问者要求添加更多细节

由于我不熟悉您的应用程序或 Java 库的功能,这将有些抽象,但我相信您可以根据自己的需要填写空白。

似乎完全移植 Rails 应用程序以在 Jruby 上运行是不可行的。美好的。因此,一个想法是将您的Java 库作为Web 服务(例如RESTful)公开给您的RoR 应用程序。让我们称这个东西为 JLS。在这种情况下,它将作为 Java 或 Jruby 网络服务运行,监听请求,调用库并发送回响应(这里一般挥手,但你明白了)。

根据您的开发人员更熟悉的内容,您可以在运行 Servlet 容器的 Java 中创建 JLS。或者您可以在 Ruby 中开发 JLS,在 Jruby 上运行(绑定到您的 Java 库)并使用 Rails 或 Sinatra 之类的框架来实现它。

在 RoR 方面,假设您已将 JLS 设为 RESTful(我不知道这是否适合您的情况),您可以使用该ActiveResource工具与 JLS 进行通信。

总之,RoR 应用程序和 JLS 在不同的内存空间(甚至可能是不同的主机)中运行。每个都可以在一定程度上独立开发(当然使用 RESTful 接口协议),并且您的 RoR 应用程序不需要被中断或置于危险之中。

这个建议的选项带有大量的小字,但我希望你能得到大致的想法。

于 2010-07-28T21:40:21.820 回答