Веб-сервис в Ruby, который вызывает код Java

1

У меня есть приложение JRuby/Rails, которое должно получать данные из системы, написанной на Java. Я уже разработал, как вызвать Java-код из Ruby.

Однако скажем, что объект Client, который мне нужно создать, запускает потоки, общается с внутренней системой и т.д., И что данные передаются асинхронно в обратных вызовах.

Должен ли я писать отдельный веб-сервис (который создает этот клиент) с постоянным подключением к системе Java? Таким образом, мой код Ruby/Rails может вызывать его синхронно. Или можно написать этот обработчик asynch непосредственно в Rails?

Когда несколько HTTP-клиентов выдают свои GET, я, конечно, должен подключиться к системе Java, когда придет первый клиент. Для следующих клиентов данные уже будут там.

Я понимаю, каково будет правильное решение, но мне любопытно, могу ли я все это сделать в Rails.

Я могу (пока) жить без обновления в реальном времени веб-страницы, пока данные в обратных вызовах Java хранятся "где-то", так что следующий HTTP refresh/GET может вернуть его. Шаг гнезда будет SSE, Javascript и т.д.

Я думаю, что я знаю, как создать веб-сервис Java, но я предпочел бы, чтобы решение было немного проще с меньшим количеством сервисов.

благодаря

  • 0
    Можно ли расширить Java-бэкэнд? Или вы хотите чисто рубиновое решение?
  • 0
    Не уверен, что понимаю? Система Java - это торговое приложение без каких-либо других связей с внешним миром. Я просто хотел создать несколько отчетов в JRuby / Rails и подумал, что это удобный способ доступа к данным в этой системе.
Показать ещё 3 комментария
Теги:
web-services
jruby

1 ответ

0

Поскольку у вас также есть доступ к java-коду, у меня есть два подхода к расширению бэкэнда Java, чтобы предоставить данные, которые вы хотите использовать в своем приложении для рубинового интерфейса.

Использовать REST или HTTP-службу

Ваш рубиновый веб-сервис может взаимодействовать с бэкэнд, используя REST (или любой другой HTTP-подход). Это приведет к более чистым и многоразовым кодам. Поскольку вы можете получить доступ к данным бэкэнд с любым клиентом, способным к HTML.

Использовать TCP вместе с небольшим протоколом

В этом подходе клиенты должны подключиться к сокету TCP на бэкэнд для отправки данных взад и вперед. Вам нужно написать небольшой байтовый или строковый протокол, который также необходимо проанализировать. Это более сложный, чем первый подход, но также более эффективный, и вам не нужно полагаться на внешние библиотеки (например, трикотаж, для REST). Он также обладает всеми преимуществами прежнего подхода, вы можете обслуживать любого клиента, способного осуществлять сетевую связь и обработку сокетов.

  • 0
    Это вроде правильно, но это заставило бы меня создать много дублированного кода. Данные есть (в виде обратных вызовов Java при обновлении), и я хочу представить их на веб-странице.
  • 0
    Тогда, может быть, это поможет вам github.com/jruby/jruby/wiki/CallingJavaFromJRuby

Ещё вопросы

Сообщество Overcoder
Наверх
Меню