java - 实现 java 的 Hl7 解析器监听器

标签 java jsf listener hl7 hapi

背景

我正在为一位医生 friend 编写一个医疗记录应用程序。我被告知要在应用程序中编写一个等待 HL7 消息的监听器。这样医院就可以发送 HL7 消息,我的听众就会听到它们。于是我来到HAPI网站查看了this example 。我从中了解到的是,它正在创建一个服务器来监听消息。

我正在 Eclipse 中使用 Tomcat 7.0 上的 JSF 2.0 进行开发。人们通常将这种监听器放在 JSF 项目中的什么位置?我尝试在网上搜索这个答案,但一无所获!

我的问题

我知道这段代码位于一个类中。当该类被调用时,套接字将“打开”并等待响应。所以我想在项目部署后立即调用这个类。这是怎么做到的?如何仅调用该类一次(当应用程序启动时)以打开监听器?

非常感谢任何和所有的帮助!如果我有不清楚的地方请告诉我!

最佳答案

您通常不会在 Tomcat 托管的应用程序内运行端口监听器。通常最好将这两件事分开。总的来说,Web 服务器并不意味着在其控制范围之外运行单独的执行线程。

您可以考虑使用 Spring Integration、JBossESB 或 Apache Camel 之类的东西来接收消息并将它们处理到数据库、文件夹(或其他任何内容)中,然后 Tomcat 托管的 Web 应用程序允许您进行操作。 ESB 容器可以与 Tomcat 托管在同一个 JVM 进程中,但我自己不会采用这种方法 - 我会用一个单独的容器进行消息处理,另一个运行 Web 应用程序。

如果您确实想要一个“单一应用程序”,您可以考虑创建一个 Java 应用程序,根据您的示例启动监听器,然后启动 Tomcat 的嵌入式版本。

如果您真的想在 Tomcat 中运行它,作为 Web 应用程序本身的一部分,您可以创建一个类来进行监听并将其加载到 Web 应用程序的应用程序上下文中。您可以通过将其实例添加到自动加载的 servlet 内的 appl 上下文中来完成此操作 - 使用 <load-on-startup>1</load-on-startup>在 servlet 定义中。您可以对 servlet 进行编码,以在添加新实例之前检查上下文中是否已经存在一个实例(万一手动调用过该实例),或者沿着 Spring 容器路线将此对象作为单例进行管理。

* 编辑:20120114T004300Z *

Apache CamelEnterprise Service Bus 可能使用的路由引擎的示例(ESB),例如 Apache ServiceMix,它允许多个应用程序通过交换消息进行互操作。从声音来看,您只能使用此应用程序可用功能的一小部分。例如,对于您正在做的事情,您可能只能使用嵌入在 Spring 中的 Camel 功能。

本质上,ESB 运行“适配器”(或端点)——其中一种类型将由您在此处讨论的套接字“监听器”执行,或者可能正在监视文件夹中是否有文件到达,或者轮询数据库表以获取文件传输(“消息”(在您的情况下为 HL7 文件)到达的方式)从应用程序本身的功能中抽象出来。适配器将消息放入一个可以配置为在途中转换消息的 channel 。Camel 实际上附带了一个 HL7 component ,它可以理解 HL7 文件格式并将其解码为 HL7 模型。(它还为您提供所需的监听器/适配器)。然后,您可以在 ESB 中设置路由,将该模型传递给“消费者”Java 类,该类可以执行您需要执行的任何操作。

如果您正在处理“标准”传输、协议(protocol)和消息类型,则大多数文件接收、解析和路由只是通过 ESB 的声明性配置而不是编码来处理。

您的 Tomcat Web 应用程序可以完全自主地运行此消息处理。如前所述,有多种部署选项可以说明您具体如何执行此操作 - 包括在您的 Web 应用程序托管在 Tomcat 中的 Spring 容器内加载 Camel(如果您愿意)。

抱歉,如果这有点糟糕。花一些时间在网上阅读有关该主题的内容,鉴于 HL7 是一个标准,您可能会 find a lot of code/components already out there这可能会为您节省大量重新实现基本文件处理的时间,以便您可以专注于为您的 friend 开发增值网络应用程序。

关于java - 实现 java 的 Hl7 解析器监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8765703/

相关文章:

java - 如何使用一个 session 同时使用 JSch 中的 'exec' 和 'sftp' channel

java - 我如何分配 s :link to a ui:param value field?

maven - Mock FacesContext 来测试我的面孔消息显示类

java - Android 数据绑定(bind)监听器 View

java - java中的剪贴板监听器

java - 关于 JPA Cascade 和删除实体的问题

java - 迭代排序数组并存储不同整数的计数

用于控制进程生命周期的 Java 库

javascript - 如何使下拉列表不可选择?

java - 听众是一个很好的解决方案吗?它们是如何实现的?