Могу ли я упаковать приложение Node.js как Java EAR

Давайте представим, что ваша компания попросила разработать приложение для чата в реальном времени и хотела, чтобы это было завершено за несколько часов. Поскольку вы уже знаете, что с Node.js это очень просто, вы разработали его в Node.js, но компания использует серверы приложений Java (такие как WebSphere, JBoss или WebLogic).

Таким образом, администратор сервера ожидает развертывания файлов .EAR.

Есть ли способ предоставить файл .EAR, который запускает ваше приложение Node.js?


person Ramazan Polat    schedule 19.09.2016    source источник
comment
запускает ваше приложение Node.js позади. Что это значит? Работает ли на этом компьютере фактический сервер узлов? Кто обслуживает входящие запросы? Сервер приложений? Я хочу сказать, подумайте об этом немного, как это вообще могло бы работать?   -  person rmlan    schedule 19.09.2016
comment
Мой совет: найдите один из нескольких примеров чата в реальном времени для библиотек веб-сокетов Java и адаптируйте реализацию к вашим потребностям.   -  person rmlan    schedule 19.09.2016
comment
Это не реальный сценарий. Я просто хотел узнать, сможем ли мы как-то это сделать.   -  person Ramazan Polat    schedule 19.09.2016
comment
Может быть, мы можем упаковать исполняемый файл node.js, а приложение затем использовать java для запуска node.js с соответствующими параметрами для запуска сервера?   -  person Ramazan Polat    schedule 19.09.2016
comment
Хорошо, но в этот момент вы буквально запускаете сервер node.js. Зачем вообще задействовать сервер Java-приложений? Кроме того, удачи в выяснении того, как маршрутизировать входящие запросы, если только вы не используете два совершенно разных порта.   -  person rmlan    schedule 19.09.2016


Ответы (2)


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

  1. является ли целевая JVM достаточно привилегированной для запуска процессов или безопасности с правами на выполнение, достаточно слабой, чтобы позволить JVM выполнять процесс оболочки с использованием своих методов API. (я говорю о безопасности Java, а не о безопасности ОС)

  2. вы должны из первых рук точно знать, на каком типе ОС работает ушной контейнер.

  3. EAR/WAR должен быть «расширен» до реальной файловой системы, известной ОС.

  4. вы должны знать, имеют ли учетные данные, под которыми контейнер уха, достаточные права для выполнения команды ОС.

как только вы точно знаете эти четыре пункта, нет ничего страшного в том, чтобы использовать API-интерфейс Process java для выполнения процесса Node.js, который исполняемый файл (статически связанный и совместимый с ОС) удобно находится в известной позиции...

даже как сказал Бруно Гридер, совместное использование порта невозможно, поэтому веб-приложение будет выступать в качестве переднего прокси-сервера для «настоящего» приложения, работающего на Node.js, HTTP или HTTPS, которое вообще не имеет значения в качестве окончательного сообщения. между контейнером веб-приложения и самим веб-приложением больше не шифруется.

ооооо... так мило... :) но вы должны знать, что использование такого подлого метода в корпоративной среде - не очень хорошая вещь.

person Alex    schedule 26.09.2016
comment
Как я упоминал ранее, это НЕ сценарий реального мира. Я просто хочу знать, есть ли способ сделать это. Если это так, то разработчики могут сделать контейнер для приложений, написанных на nodejs, и сервер как java-приложение. Кстати, вы можете сделать какой-нибудь рабочий пример для этого? - person Ramazan Polat; 28.09.2016
comment
нет, у меня нет на это времени, я увлекся, так как проблема интересная, реализация такого решения зависит от вас. В любом случае, я ничего не имею против руководящих принципов компании, они обычно разумно определены, чтобы избежать нехватки ресурсов производственного персонала для возможной производственной проблемы, связанной с программным решением. реальная проблема заключается в вашей иерархии, которая не оценила стоимость или просто хочет сделать это сейчас. - person Alex; 28.09.2016
comment
Как я уже говорил, это не реальный сценарий. Никто не просил меня сделать приложение для чата, и, конечно же, никто, включая меня, не должен хотеть прятать приложение nodejs в ухе Java. И я также не работаю программистом, я администратор базы данных, заинтересованный в node.js, вот и все. Но если бы каким-то образом это можно было сделать, это был бы мост между java и nodejs, который мог бы многое изменить имхо. - person Ramazan Polat; 28.09.2016
comment
ну, если вы хотите соединить вещи между nodejs и java, вы можете использовать несколько решений, таких как прокси, веб-сервис, обмен сообщениями и т. д.... в вашем вопросе говорилось, как упаковать nodejs в EAR, поэтому это решение способ встраивания/упаковки, но это не значит, что о других возможностях не может быть и речи. - person Alex; 28.09.2016

No.

Вы не можете правильно упаковать «предустановленный» nodeJS внутри уха.

Установка NodeJS отличается в Windows и Linux; EAR не будет портативным.

Кстати, я бы не хотел быть на вашем месте, если администраторы сервера узнают, что вы упаковываете исполняемые файлы, не предназначенные для запуска на JVM, внутри EAR.

(примечание 1: как отмечено в комментариях @mlan выше, было бы невозможно совместно использовать порты между процессом JVM и nodejs - для его подделки потребуется внешний обратный прокси-сервер, отправляющий HTTP-запросы, при условии, что весь трафик является HTTP)

(примечание 2: не поймите меня неправильно, вы можете поместить что угодно в EAR, включая исполняемые файлы, которые вы запускаете из Java, например, с помощью ProcessBuilder, но это крайний обходной путь)

person Bruno Grieder    schedule 26.09.2016