2010-07-28 1 views
0

Фон: У меня есть Java-библиотека, к которой обращаются многие разработчики - обычно через java. Тем не менее, некоторые разработчики надеются получить доступ к этому через Ruby API. Я тяготею в направлении Jruby, чтобы реализовать Java-Ruby API.Как связаны Rails и Jruby?

Вопросы:

  1. Моя главная задача в том, что эти разработчики не смогут использовать API в их текущей, Ruby на Rails рамках развития; но вместо этого придется работать в среде рельсов Jruby. Это будет так?

  2. Возможно, мне не хватает связи между Jruby и Ruby on Rails. Но, похоже, вы можете работать в Rails или работать на рельсах Jruby - это технически две разные среды разработки?

Я был бы очень признателен любой свет кто-то может пролить на это ..

Edit: Принуждение разработчиков (на самом деле клиенты, чтобы быть более точным), чтобы сделать большие изменения в свои проекты, чтобы приспособить для этот API на самом деле не вариант. Итак, если их приложения Rails придется преобразовать в приложения Jruby on Rails, возможно, кто-то может предложить мне еще одну альтернативу (кроме Jruby)?

ответ

1

Во-первых, я должен упомянуть, что Ruby on Rails - это просто код Ruby, и тот же код может работать в среде JRuby (на JVM) или в режиме MRI (написанный на C).

Однако JRuby может загружать классы Java и использовать Java API. Попросить ваших клиентов переключить среду развертывания на JRuby может оказаться невозможным, но если вы можете настроить службу на Java, которая говорит на XML или JSON, тогда они смогут легко использовать ее из Rails.

+0

Если бы вы могли дать мне возможность начать спускаться по этому проспекту, я бы очень признателен. – anxiety

1

Возможно, вы найдете ответы на вопросы similar question. В зависимости от вашего приложения может быть доступно плавное подключение вашего приложения RoR для запуска на JRuby с учетом оговорок, отмеченных в этом ответе. Но вы должны быть уверены, что выгоды от этого уравновешивают усилия и потенциальные риски.

В качестве альтернативы вы можете рассмотреть возможность использования этих средств библиотеки Java для вашего приложения MRI Rails в качестве внутренней веб-службы (которая может быть Rails или Sinatra или аналогичной), построенной на JRuby. Таким образом вы отделите элементы и снимите риск с проектом. Если впоследствии вам было удобно работать с этой работой, вы могли бы рассмотреть возможность их свертывания вместе, все под JRuby-on-Rails, если бы это имело смысл.

UPDATE: Добавление большего количества деталей на спрашивающих запросить

Как я не знаком с тем, что ваше приложение или библиотеки Java сделать это будет несколько абстрактно, но я надеюсь, что вы можете заполнить пробелы, чтобы удовлетворить ваши потребности ,

Похоже, что полный перенос приложений Rails для запуска на Jruby невозможен. Хорошо. Таким образом, одна идея заключалась бы в том, чтобы предоставить вашу библиотеку Java в качестве веб-службы (например, RESTful) в ваше приложение RoR. Назовем это JLS. В этом случае он будет работать как сетевой сервис Java или Jruby, прослушивать запросы, звонить в библиотеку и отправлять ответы (общая размахивая руками здесь, но вы получаете идею).

В зависимости от того, что ваши разработчики более удобны, вы можете создать JLS на Java, где может быть контейнер Servlet. Или вы можете разработать JLS в Ruby, работая на Jruby (привязка к вашей библиотеке Java) и использовать инфраструктуру Rails или Sinatra для ее реализации.

На стороне RoR, если вы сделали JLS RESTful (и я не знаю, подходит ли это в вашем случае), вы можете использовать средство ActiveResource для связи с JLS.

Таким образом, приложение RoR и JLS запускаются в отдельных пространствах памяти (возможно, даже разных хостов). Каждый из них может быть разработан несколько независимо (с RESTful интерфейсом, конечно, конечно), и ваше приложение RoR не нужно нарушать или подвергать риску.

Этот предлагаемый вариант поставляется с тоннами мелкой печати, но я надеюсь, что вы получите общую идею.

+0

Спасибо за ответ. Не могли бы вы немного расширить свой второй абзац? Этот вариант кажется, что это может быть немного более целесообразным для моей ситуации. – anxiety