Реализация слушателя парсера Hl7 для Java - PullRequest
2 голосов
/ 07 января 2012

Фон

Я пишу приложение для медицинской карты для друга, который является Доктором. Мне сказали написать слушателя в приложении, которое ожидает сообщений HL7. Таким образом, больница может отправлять сообщения HL7, и мой слушатель поймает их. Поэтому я зашел на сайт HAPI и просмотрел этот пример . Из этого я понимаю, что он создает сервер для прослушивания сообщения.

Я разрабатываю это в Eclipse, используя JSF 2.0 на Tomcat 7.0. Где обычно помещают такого типа слушателя в проект с JSF? Я попытался найти ответ в Интернете и ничего не нашел!

Мой вопрос

Я знаю, что этот код входит в класс. Когда класс будет вызван, сокет будет «включен», и он будет ждать ответа. Поэтому я хочу вызвать этот класс, как только проект будет развернут. Как это сделать? Как мне вызвать этот класс только один раз (когда приложение запускается), чтобы включить прослушиватель?

Любая помощь очень ценится! И если мне что-то неясно, дайте мне знать!

Ответы [ 5 ]

4 голосов
/ 13 января 2012

Обычно вы не запускаете прослушиватели портов внутри приложения, размещенного в 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 является стандартом, вы, вероятно, найдете много кода / компонентов, уже существующих , которые могут сэкономить вам много времени при повторной реализации.базовая обработка файлов, чтобы вы могли сконцентрироваться на добавленном веб-приложении для вашего друга.

2 голосов
/ 07 января 2012

«Слушатель» - это просто класс, который прослушивает открытый порт.В Java это в основном делается через Socket API, хотя вы можете найти библиотеку, которая лучше соответствует вашим целям.

В руководстве по Java есть несколько примеров: http://docs.oracle.com/javase/tutorial/networking/sockets/index.html

В этом случаевы бы писали сервер (прослушивая половину соглашения клиент-сервер), тогда как система «Больница», отправляющая сообщение, сыграла бы роль клиента.

Когда вы прослушиваете порт, тогдаСообщения HL7 поступают в виде простого текста на входной поток этого сокета.Вы можете либо проанализировать сообщение вручную (жизнеспособно, если вас интересует только одна или две детали из сообщения), или если вы планируете обрабатывать десятки типов сообщений, вы можете посмотреть одну из библиотек синтаксического анализа HL7..

Имейте в виду, однако, что разные разработчики сообщений HL7 могут иногда отправлять данные в несколько разных условиях.(К сожалению, многие пользователи воспринимают HL7 как «рекомендацию», а не как «стандарт»). Если вы планируете поддерживать множество различных каналов от множества различных провайдеров, вы будете на 1010 * намного лучшеиспользуя промежуточное программное обеспечение, такое как MirthConnect, для обработки разбора и перевода сообщений в нечто, разработанное для вашего приложения.

1 голос
/ 15 февраля 2013

Более года, так что вы, наверное, все поняли, но Enterprise Service Bus (ESB) - это тип промежуточного программного обеспечения (когда вы думаете о программном обеспечении, есть бэкэнд, то есть Database / Analytics / Admin Tools и front-end, т.е. приложение / WebApp / GUI, отображаемое для конечного пользователя и взаимодействующее с ним), промежуточное программное обеспечение находится между ними и помогает выполнять интеграцию или разделение / координацию задач.Apache ServiceMix (ESB, который содержит механизм маршрутизации Apache Camel) - это, вероятно, то, что вам нужно, и его можно использовать для реализации ряда различных корпоративных шаблонов интеграции, таких как «Маршрутизация сообщений» (тот, который вам нужен).

ApacheCamel имеет встроенный анализатор сообщений HL7 v2 (использует HAPI), который является вариантом HL7 с разделением табуляцией: http://camel.apache.org/hl7.html

Для сообщений HL7 v3 в формате XML вы можете использовать наборы инструментов, доступные здесь вv3 утилиты: http://www.hl7.org/participate/toolsandresources.cfm?ref=nav

Существуют примеры как сервера (прослушивание и чтение сообщения), так и клиента (создание и отправка сообщения).

0 голосов
/ 07 января 2012

Я бы посоветовал взглянуть на Mirth Connect http://www.mirthcorp.com/community/mirth-connect в качестве механизма интеграции сообщений HL7. Внутренне он использует HAPI.

0 голосов
/ 07 января 2012

«Слушатель» обычно является слушателем событий в Java.

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

Объекты Application являются прослушивателями событий.Они добавляются во внутреннюю коллекцию класса сервера (в данном случае с дополнительными параметрами, которые сообщают серверу, какие прослушиватели должны маршрутизировать, на какие классы сообщения HL7).

Каждый класс Application должен реализовывать определенныйинтерфейс - это слушатель событий.Класс SimpleServer будет вызывать методы этого интерфейса;processMessage();чтобы выполнять действия на основе содержимого сообщения, вы пишете класс, реализующий этот интерфейс, и передаете его экземпляры классу сервера.В методе processMessage() вы выполняете все необходимые действия.

Поскольку вы можете зарегистрировать несколько прослушивателей, вы можете выполнить ряд действий, например, вы можете иметь два прослушивателя для сообщений ADT A01 (допустить пациента);тот, который забронировал их, и тот, кто назначил им кровать.

...