2010-11-29 16 views
3

J'essaie d'ouvrir une connexion de base vers un serveur HL7 où j'envoie une requête et obtiens la réponse ACK. Cela sera fait en continu.quand fermer et rouvrir le socket après l'envoi du message HL7

  1. Si cela se fait en continu, quand est-ce que je ferme le socket? Est-ce que je l'applique correctement, dans ce cas?
  2. Si je ferme le socket, comment l'ouvrir à nouveau? Les javadocs pour ConnectionHub indique ce qui suit:
attach(java.lang.String host, int port, Parser parser, 
     java.lang.Class<? extends LowerLayerProtocol> llpClass) 

Retourne une connexion à l'adresse indiquée, l'ouverture de cette connexion si nécessaire.

Cependant, dans la réalité, il n'ouvrira pas une nouvelle connexion s'il était déjà fermé.

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(); 

Résultat: La première passe passe par parfaitement, à la demande envoyée et ACK reçu. Tout appel de cette méthode se traduit par java.net.SocketException: Socket closed "du côté client. Si je retire l'appel connection.close(), il fonctionnera bien pendant un certain laps de temps, puis la prise fermeront lui-même.

Répondre

4

Si vous communiquez via HL7 2.X, le comportement attendu sur le socket est à jamais déconnecter - vous allouez la connexion et maintenez le socket actif.Ceci autrement, une application HL7 ne pas agissent comme un navigateur Web dans lequel il se connecte selon les besoins Au lieu de cela, les deux extrémités travaillent pour maintenir le socket connecté en permanence.La plupart des applications seront ennuyées si vous vous déconnectez.En outre, la plupart des moteurs d'intégration ont des alertes qui se déclencheront si vous êtes déconnecté trop longtemps. Une fois la prise connectée, vous devez utiliser le protocole HL7 Minimum Lower Layer Protocol (MLLP ou MLP) pour communiquer le contenu HL7 2.X. Si vous envoyez des données, vous devez attendre un accusé de réception HL7 avant d'envoyer le message suivant. Si vous recevez des données, vous devez générer le HL7 Ack.

Références:

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

Merci pour votre réponse Dave. – don

+0

Je vais mettre une sorte de bloc pour attendre l'accusé de réception du serveur. Juste quelques questions. Si je maintiens la connexion avec la prise, elle semble se déconnecter après un certain temps. Comment ré-ouvrir la prise dans ce cas? – don