RMI или сокетное соединение с Java-программой в OpenShift

У меня есть следующий простой сценарий:

Я создал приложение JBossAS7 на OpenShift. У меня есть index.jsp, который вызывает класс Java при каждой загрузке. Этот класс Java собирает некоторые данные и сохраняет их в виде строки. Теперь я хочу получить текст, содержащийся в этой строке, но НЕ отображать его на странице.

Мне нужен такой механизм, как RMI или сокет, к которому я могу подключиться и просто получить String с помощью клиентской программы. К сожалению, OpenShift блокирует все порты, и я не могу использовать RMI или сокеты для привязки к чему-либо (мне всегда отказывают в доступе).

Есть ли способ решить эту проблему? Спасибо!


person Ciri    schedule 14.05.2014    source источник


Ответы (2)


Я бы сказал, что лучший способ предоставить эти данные — через сервлет или создать спокойный API и разрешить доступ к нему, возможно, с некоторой аутентификацией или токеном безопасности.

Другой мыслью было бы использовать ironmq (iron.io) и отправлять данные в очередь, которую вы можете обработать из другого приложения.

person Community    schedule 14.05.2014

Способ, которым я решил это, довольно прост, но плохо объяснен и задокументирован на форумах или досках объявлений.

OpenShift позволяет пользователю привязывать только порты между 15000 и 35530. Однако при этом пользователь также должен указать IP-адрес хоста, иначе будет использоваться localhost, что не разрешено в OpenShift. Адрес сервера находится в переменной среды OPENSHIFT_JBOSSAS_IP (я использую JBoss AS 7.1, переменная может иметь другое имя в зависимости от используемой технологии). Я обнаружил это, войдя в свое приложение через SSH и выполнив команду env.

После запуска программы в OpenShift и привязки порта к правильному IP-адресу пользователь должен перенаправить порт, чтобы подключиться к нему. Это можно сделать либо из eclipse, либо с помощью инструментов RHC. Переадресация портов в OpenShift означает, что связанный порт на сервере OpenShift будет сопоставлен с тем же портом на локальном хосте пользователя. При написании клиентской программы пользователь должен подключаться к localhost:PORT вместо IP_ADDRESS_OF_OPENSHIFT_SERVER:PORT. Это было то, что мне потребовалось некоторое время, чтобы понять. Как только я все сделал правильно, клиентская программа запустилась без проблем.

person Ciri    schedule 18.05.2014