2010-11-29 4 views
3

Ich versuche, eine Basisverbindung zu einem HL7-Server zu öffnen, wo ich eine Anfrage senden und die ACK-Antwort erhalten. Dies wird kontinuierlich durchgeführt.Wann zu schließen und wieder zu öffnen Socket nach HL7-Nachricht gesendet

  1. Wenn dies kontinuierlich gemacht wird, wann schließe ich den Sockel? Implementiere ich das in diesem Fall richtig?
  2. Wenn ich die Steckdose schließe, wie öffne ich sie wieder? Die javadocs für ConnectionHub zeigt Folgendes an:
attach(java.lang.String host, int port, Parser parser, 
     java.lang.Class<? extends LowerLayerProtocol> llpClass) 

Gibt eine Verbindung an die angegebene Adresse, um diese Verbindung zu öffnen, falls erforderlich.

Im wirklichen Leben wird jedoch keine neue Verbindung geöffnet, wenn sie bereits geschlossen wurde.

Patient patient = appt.getPatient(); 
Parser parser = new GenericParser(); 
Message hl7msg = parser.parse(wlp.getORMString(appt)); 

//Connect to listening servers 
ConnectionHub connectionHub = ConnectionHub.getInstance(); 
// A connection object represents a socket attached to an HL7 server 
Connection connection = connectionHub.attach(serverIP, serverPort, 
          new PipeParser(), MinLowerLayerProtocol.class); 
if (!connection.isOpen()) { 
    System.out.println("CONNNECTION is CLOSED"); 
    connection = connectionHub.attach(serverIP, serverPort, new PipeParser(),   
            MinLowerLayerProtocol.class); 
    if (!connection.isOpen()) { 
    System.out.println("CONNNECTION is still CLOSED"); 
    } 
} 
Initiator initiator = connection.getInitiator(); 
Message response = initiator.sendAndReceive(hl7msg); 

String responseString = parser.encode(response); 
System.out.println("Received response:\n" + responseString); 
connection.close(); 

Ergebnis: Der erste Durchgang durchläuft perfekt, mit Anforderung gesendet und ACK empfangen. Jeder nachfolgende Aufruf dieser Methode führt zu java.net.SocketException: Socket closed "auf der Client-Seite. Wenn ich den connection.close() Anruf entfernen, dann wird es gut laufen für eine gewisse Zeit, dann die Buchse wird sich schließen.

Antwort

4

Wenn Sie kommunizieren über HL7 2.X, das erwartete Verhalten auf dem Socket ist nie trennen - Sie zuweisen die Verbindung und halten Sie den Socket aktiv.So anders gesagt, funktioniert eine HL7-Anwendung nicht handeln wie ein Webbrowser, in dem es verbindet, wie benötigt Wenn die Verbindung getrennt wird, arbeiten beide Enden, um den Socket ständig verbunden zu halten. Die meisten Anwendungen sind verärgert, wenn Sie die Verbindung trennen. Außerdem haben die meisten Integrations-Engines Warnungen, die ausgelöst werden, wenn Sie zu lange getrennt sind.

Sobald der Socket verbunden ist, müssen Sie das HL7 Minimum Lower Layer Protocol (MLLP oder MLP) verwenden, um den HL7 2.X-Inhalt zu kommunizieren. Wenn Sie Daten senden, sollten Sie auf eine HL7-Bestätigung warten, bevor Sie die nächste Nachricht senden. Wenn Sie Daten erhalten, sollten Sie die HL7-Bestätigung generieren.

Referenzen:

MLP - http://www.hl7standards.com/blog/2007/05/02/hl7-mlp-minimum-layer-protocol-defined

Acks - http://www.corepointhealth.com/resource-center/hl7-resources/hl7-acknowledgement

+0

Vielen Dank für Ihre Antwort Dave. – don

+0

Ich werde eine Art Block in den Server stellen, um auf die Bestätigung zu warten. Nur ein paar Fragen. Wenn ich die Verbindung mit dem Socket aufrechterhalte, scheint es sich nach einiger Zeit von selbst zu trennen. Wie öffne ich in diesem Fall den Socket erneut? – don

Verwandte Themen