Hi folks,

I am looking for a design decision to cache session information for a request workflow embedded in a SOAP/REST-based webapp.

Here is a little background how the workflow is structured and what I am trying to solve:

Note: I have read the entire tutorial and am somewhat overwhelmed by the amount of features the HttpClient has to offer, so I beg your patience.

Workflow:
1. Client issues a request either with SOAP or REST with an object id
2. Server accepts request and does the following:
 2.1. Create a client with a cookie manager
 2.2. Login to a backend server A (HTTP request, server A)
 2.3. Read object information (HTTP request, server A)
2.4. Obtain a read ticket for a HTTP-based remote store (HTTP request, server A) 2.5. Download file behind object id to disk from remote store (HTTP request, server B)
 2.6. perform a logout (HTTP request, server A)
 2.7. Close the client
3. Respond to client with object information and the stream from the saved file

The entire communication with the server A is stateful with a session cookie, all responses are fully consumed either with a response handler or with a try-with-resources clause.

The problem: the login/logout requests consume around 10 seconds, sometimes even more. I'd like to avoid this every time.

My idea was to come around this with Commons Pool 2 which I have already used for some other session pooling successfully.

Requirements: it is not only necessary to maintain the cookie store but a client id header which has a randomly generated integer assigned plus a request counter. The maintained session has to be used by one thread at the same time, same applies for the header otherwise server A would queue all requests. The pool would guarantee that.

Two possible solutions come to my mind:

1. Save the client id and cookie store in the pool and always create a new client.
2. Save the client id along with the authenticated HttpClient and reuse it.

Both solutions will always increment the request counter of course.

From HttpClient's view which makes more sense here? What if I go with option 2, will I have stale connections, clients, etc.?

Thanks,

Michael

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to