Обычно вы не запускаете прослушиватели портов внутри приложения, размещенного в Tomcat.Вы обычно лучше держать две вещи разделенными.В основном веб-серверы не предназначены для запуска отдельных потоков выполнения вне их контроля.
Вы можете использовать что-то вроде Spring Integration, JBossESB или Apache Camel для получения сообщений и их обработки в базе данных.- папка с файлами (или что-то еще), которой ваше веб-приложение, размещенное на Tomcat, позволяло вам манипулировать.Контейнер ESB мог бы быть размещен в том же процессе JVM, что и Tomcat, но я бы сам не использовал этот подход - у меня был бы отдельный, выполняющий обработку сообщений, и другой, выполняющий веб-приложение.
Если вы действительно хотели «отдельное приложение», вы могли бы подумать о создании приложения Java, которое запускает прослушиватель в соответствии с вашим примером, а затем запускает встроенную версию Tomcat.
Если вы действительно хотите запустить его внутри Tomcat, как часть самого веб-приложения, вы можете создать класс, который будет прослушивать, и загрузить его в контекст приложения веб-приложения.Вы можете сделать это, добавив его экземпляр в контекст приложения в автоматически загружаемом сервлете - используйте <load-on-startup>1</load-on-startup>
в определении сервлета.Вы должны кодировать сервлет, чтобы проверить, существует ли уже экземпляр в контексте, прежде чем добавлять новый (по случайному случаю, когда он когда-либо вызывался вручную), или идти по маршруту контейнера Spring, чтобы управлять этим объектом как одиночным.
* РЕДАКТИРОВАТЬ: 20120114T004300Z *
Apache Camel является примером механизма маршрутизации, который может использоваться Enterprise Service Bus (ESB), такой как Apache ServiceMix, который позволяет нескольким приложениям взаимодействовать путем обмена сообщениями.Вы будете использовать только часть функциональности этого приложения по его звукам.Для того, что вы делаете, вы, возможно, просто сможете использовать возможности Camel, встроенные в Spring, например.
По сути, ESB запускает «адаптеры» (или конечные точки) - один из типов которых будет использоваться сокетом«слушатель», о котором вы говорите здесь, или вы можете наблюдать за папкой для поступления файлов, или опрашивать таблицу базы данных на предмет появления строк, или ожидать в очереди JMS и т. д. Транспорт (средство, с помощью которого «сообщение» (в вашем случае поступающий файл HL7) становится абстрагированным от функциональности самого приложения. Адаптер помещает сообщение в канал, который можно настроить для преобразования сообщения на маршруте. Camel фактически поставляется с компонентом HL7 , который может понимать формат файла HL7 и преобразовывать его в модель HL7 (он также дает вам нужный приемник / адаптер). Затем вы настроите маршрутизацию в ESB для передачи этой модели в «потребительскую» Javaкласс, который делает все, что вам нужно с ним делать.
Если вы имеете дело со "стандартными" транспортами, протПротоколы и типы сообщений Большая часть получения, анализа и маршрутизации файлов выполняется только декларативной конфигурацией ESB, а не кодированием.
Ваше веб-приложение Tomcat может полностью автономно работать с этой обработкой сообщений.Как уже упоминалось, существуют различные варианты развертывания в отношении того, как именно вы это сделаете, включая загрузку Camel в контейнере Spring, размещенном в Tomcat, вашим веб-приложением, если хотите.
Извинения, если это немного сложно.Потратьте некоторое время на изучение этой темы в Интернете, учитывая, что HL7 является стандартом, вы, вероятно, найдете много кода / компонентов, уже существующих , которые могут сэкономить вам много времени при повторной реализации.базовая обработка файлов, чтобы вы могли сконцентрироваться на добавленном веб-приложении для вашего друга.