В стеке Java EE есть три основных контейнера: веб-контейнер, контейнер EJB и контейнер JCA. JCA предназначен для обеспечения входящего и исходящего соединения со сторонними системами, такими как база данных, JMS-брокер или другие.
«Правильный» способ создать соединение с сервером Telnet из EJB или веб-приложения - использовать для этого соединитель JCA.
[client] <-|-> [web] <--> [ejb] <--> [jca] <-|-> [telnet server]
Труба | обозначает удаленные границы. Предположим, EJB - это местные, но они все равно не обязательны; Вы также можете использовать коннектор JCA из веб-слоя.
Я предлагаю вам выяснить, существуют ли уже существующие реализации. Быстрый Google дал мне этот результат: JCA-коннектор для клиента Telnet .
Другой подход (но не совместимый со спецификацией) заключается в запуске потока, который прослушивает сокет, из ServletContextListener
. Поток будет работать на веб-уровне, и вы сможете управлять подключением к серверу Telnet по своему усмотрению.
Я предлагаю вам также взглянуть на этот другой вопрос: Приложение Java EE, которое слушает сокет .
В обоих случаях вам, вероятно, потребуется выяснить, как временно хранить информацию, полученную сервером Telnet (централизованное хранилище, о котором вы упомянули), которая впоследствии будет отображаться в веб-интерфейсе. Это снова проблематично с Java EE, потому что спецификация запрещает использование глобального состояния. Например, вы не должны использовать поле static
в теории. Но на практике это работает, если у вас запущен только один экземпляр приложения.
Это всего лишь грубый набросок, но я надеюсь, что это поможет.