4 import java.util.ArrayList;
5 import java.util.Random;
6 import java.util.Arrays;
8 import org.opensrf.util.*;
12 * Models an OpenSRF client session.
14 public class ClientSession extends Session {
16 /** The remote service to communicate with */
17 private String service;
18 private String domain;
19 private String router;
20 private String origRemoteNode;
22 private List<Request> requests;
25 * Creates a new client session. Initializes the
26 * @param service The remove service.
28 public ClientSession(String service) throws ConfigException {
29 this.service = service;
31 /** generate the remote node string */
32 domain = (String) Config.getFirst("/domains/domain");
33 router = Config.getString("/router_name");
34 setRemoteNode(router + "@" + domain + "/" + service);
35 origRemoteNode = getRemoteNode();
38 /* create a random thread */
39 long time = new Date().getTime();
40 Random rand = new Random(time);
41 setThread(rand.nextInt()+""+rand.nextInt()+""+time);
43 requests = new ArrayList<Request>();
49 * Creates a new request to send to our remote service.
50 * @param method The method API name
51 * @param params The list of method parameters
52 * @return The request object.
54 public Request request(String method, List<Object> params) throws SessionException {
55 return request(new Request(this, nextId++, method, params));
59 * Creates a new request to send to our remote service.
60 * @param method The method API name
61 * @param params The list of method parameters
62 * @return The request object.
64 public Request request(String method, Object[] params) throws SessionException {
65 return request(new Request(this, nextId++, method, Arrays.asList(params)));
70 * Creates a new request to send to our remote service.
71 * @param method The method API name
72 * @return The request object.
74 public Request request(String method) throws SessionException {
75 return request(new Request(this, nextId++, method));
79 public Request request(Request req) throws SessionException {
80 if(getConnectState() != ConnectState.CONNECTED)
82 //requests.set(req.getId(), req);
90 * Resets the remoteNode to its original state.
92 public void resetRemoteId() {
93 setRemoteNode(origRemoteNode);
98 * Pushes a response onto the queue of the appropriate request.
99 * @param msg The the received RESULT Message whose payload
100 * contains a Result object.
102 public void pushResponse(Message msg) {
107 req = requests.get(msg.getId());
108 } catch(IndexOutOfBoundsException e) {
109 /** LOG that an unexpected response arrived */
113 OSRFObject payload = (OSRFObject) msg.get("payload");
117 payload.getString("status"),
118 payload.getInt("statusCode"),
119 payload.get("content")