要求を送信して ACK 応答を取得する HL7 サーバーへの基本的な接続を開こうとしています。これは継続的に行われます。
- これが継続的に行われている場合、いつソケットを閉じますか? この場合、これを正しく実装していますか?
- ソケットを閉じた場合、どうすれば再び開くことができますか? ConnectionHub の javadoc は、次のことを示しています。
attach(java.lang.String host, int port, Parser parser,
java.lang.Class<? extends LowerLayerProtocol> llpClass)
指定されたアドレスへの Connection を返し、必要に応じてこの Connection を開きます。
ただし、実際には、既に閉じられている場合、新しい接続を開くことはありません。
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();
結果:
最初のパスは完全に通過し、リクエストが送信され、ACK が受信されます。このメソッドへの後続の呼び出しはjava.net.SocketException: Socket closed
、クライアント側で " になります。connection.close()
呼び出しを削除すると、一定時間正常に実行され、ソケットが閉じます。