GWT-взаимодействие с внешним автономным приложением

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

В дальнейшем нам бы хотелось иметь административный веб-интерфейс с системным статусом и что-то, что дало бы пользователю некоторый уровень контроля над оборудованием. Мы думали, что GWT может быть жизнеспособным решением. Наше приложение GWT должно иметь своего рода IPC с программным обеспечением C&C. Я не знаю, насколько это жизнеспособно, я не знаю, что мы хотим, чтобы программное обеспечение C&C было связано как веб-приложение, которое должно работать на сервере приложений.

У меня просто нет большого опыта с этим. Я думал, что клиент GWT будет взаимодействовать через RPC с сервером GWT, а сервер GWT будет иметь своего рода RPC (RMI???) с C&C.

4 ответа

Решение

Я нашел решение с помощью Spring. Мы изменили большую часть нашего приложения Command and Control для использования Spring IoC, а затем мы использовали другие библиотеки Spring для расширения его функциональности. Чтобы взаимодействовать с GWT, мы предоставляли сервисы и использовали httpInvokers для выполнения вызовов из кода сервера GWT.

Конечно, это означало, что нам нужно было использовать Spring и с нашим приложением GWT, чтобы выполнять http-вызовы из кода сервера GWT. Но все работает.

Вы можете встроить встроенный tomcat или Jetty в свое приложение и позволить ему запускать простой веб-интерфейс на основе сервлетов /JSP или GWT. Фактически, когда вы отлаживаете / запускаете приложение GWT из Eclipse, оно запускается во встроенном экземпляре Tomcat.

Другой вариант - запустить Java-апплет, который может взаимодействовать как с GWT (используя JSNI), так и с ОС. Простым примером может быть открытие общего файла в домашней папке пользователя и чтение / запись в этот файл (и приложение C&C делает то же самое).

У вас нет прямого контроля над клиентской системой с помощью JavaScript (на котором основан GWT). в вашем случае использования это даже не имеет смысла, зачем использовать внешний сервер для веб-сайта, управляющего локальной программой?

Если вы измените это (сервер приложений работает в той же системе, что и программное обеспечение C&C, а веб-клиент доступен везде), то это было бы возможно, но это не имело бы большого отношения к GWT. На сервере вы можете написать обычный код Java. GWT просто будет использоваться для веб-интерфейса и RPC-вызовов на сервер. Вызов программного обеспечения C&C с сервера приложений может быть реализован с помощью следующей строки (пример Windows):

Runtime.getRuntime().exec("C:\\PathTo\\Program.exe")

Эта функция возвращает экземпляр класса Process который обеспечивает Input- и OutputStream для имитации ввода пользователя, а также для чтения и обработки выходных данных программ.

Обратите внимание, что при использовании этого метода вы теряете независимость от платформы, так как параметр для exec() выглядит по-разному для каждой ОС.

РЕДАКТИРОВАТЬ После повторного прочтения вашего вопроса, было бы даже более целесообразно напрямую интегрировать программное обеспечение C&C в код сервера, как и предполагает комментарий к вашему вопросу. вам нужен сервер приложений для использования GWT-RPC, а не веб-сервер, но это потрясающе. Информацию о том, как в целом работает GWT-RPC, можно найти здесь: (учебное пособие), (подробное описание)

Другие вопросы по тегам