1 /*
2 * Created on 15-Apr-2004
3 */
4 package ca.uhn.hl7v2.protocol;
5
6 import java.util.Map;
7
8 /**
9 * Encapsulates the transport layer of a connection to another
10 * HL7 server. This is the layer responsible for sending and receiving
11 * message strings. The underlying protocol used is implementation
12 * dependent, that is there may be transport layers that are implemented
13 * over email, or JMS, or HTTP.
14 *
15 * @author <a href="mailto:bryan.tripp@uhn.on.ca">Bryan Tripp</a>
16 * @version $Revision: 1.1 $ updated on $Date: 2007-02-19 02:24:38 $ by $Author: jamesagnew $
17 */
18 public interface TransportLayer {
19
20 /**
21 * Sends a message to a remote HL7 service.
22 *
23 * @param theMessage the message to send
24 * @throws TransportException
25 */
26 void send(Transportable theMessage) throws TransportException;
27
28 /**
29 * Gets the next message from the remote system. This call blocks until
30 * the next message is available.
31 *
32 * @return the next available message
33 * @throws TransportException
34 */
35 Transportable receive() throws TransportException;
36
37 /**
38 * @return metadata to be added to the metadata of all incoming messages.
39 * This provides a way of associating connection information with
40 * incoming messages (eg the IP address of the remote server).
41 */
42 Map<String, Object> getCommonMetadata();
43
44 /**
45 * Initializes a connection to the remote server. This can be called after
46 * an exception is encountered, to refresh a dead connection.
47 * @throws TransportException
48 */
49 void connect() throws TransportException;
50
51 /**
52 * @return true if connect() has completed successfully. Note that true
53 * may be returned even if a connection is dead (ie the implementation need
54 * not test a connection during this call) but should return false if connect()
55 * has not been called, or if connect() has been called and is pending.
56 */
57 boolean isConnected();
58
59 /**
60 * Drops any existing connection to the remote server.
61 * @throws TransportException
62 */
63 void disconnect() throws TransportException;
64
65 }