Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-users] Building response for request that is sleeping

Hi 
You should have a look at AsyncMiddleManServlet. It's in jetty-proxy module.





On Thu, Jul 8, 2021 at 2:45 PM Aniruddha Tekade via jetty-users <jetty-users@xxxxxxxxxxx> wrote:
Hi All,

I am trying to build a response for a request that is saved in hashmap. But I am not sure how can I solve this problem - should I use async mechanism or multithreading and how? 

  • Request A is sent to a doGET() method to be served but doGET makes some changes and makes another request B to the outside server. 
  • I save the request with its UUID request ID into a hashmap 
  • The outside server sends 200 OK back for new request B. 
  • The outside server then makes a POST request which has data to be sent back to request A.
But I am super confused about how can I send this data with a response back to request A as a response? 
Can I use some kind of asynchronous mechanism or multithreading use? But I am super struggling with this? Even simplifying this approach would be great. But I must send the data received in the POST request back to request A. Please advise on how to progress on this.

My handler class code is as follows - 

    Map<String, HttpServletRequest> requestLookup = new HashMap<>();
    public void handle(String target, Request jettyReq, HttpServletRequest request, HttpServletResponse response) {
        // Redirect API control based on HTTP method type
if (request.getMethod().equals(constGetRequest)) {
getObject(jettyReq, request, response);
}
if (request.getMethod().equals(constPostRequest)) {
writeGetObjectResponse(jettyReq, request, response);
}
jettyReq.setHandled(true);
}

public void doGET(Request jettyReq, HttpServletRequest request, HttpServletResponse response) {
requestLookup.put(xRequestId, request);

String requestURI = request.getRequestURI();
String[] strs = requestURI.split("/");
for (String str : strs) {
System.out.println("item:" + str);
}
String object_key;
String bucket_name;
String lambdaFunc;
if (strs.length <= 2) {
try {
throw new Exception("Can not get bucket and object key info");
} catch (Exception e) {
e.printStackTrace();
}
}
bucket_name = strs[1];
System.out.println("Handler -- bucketName received = " + bucket_name);

// Redis class contains the mapping of bucket_name and function name to be executed in the Python server
        lambdaFunc = redis.getFuncFromRedis(bucket_name); // example function - "".upper()

object_key = requestURI.substring(requestURI.indexOf(bucket_name) + bucket_name.length() + 1);
System.out.println("objectKey = " + object_key);
S3ObjectReader getObject = new S3ObjectReader();
response.setContentType("text/html;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);

List<String> result = getObject.printOriginalObjectContent(bucket_name,object_key);
System.out.println("Print original object content:");
for (String s : result) {
System.out.println(s);
}
        System.out.println("Print transformed object content:");
LambdaFunctionConnector connectLambdaFunc = new LambdaFunctionConnector();

connectLambdaFunc.sendRequest(lambdaFunc,result);
}

public void doPOST(Request jettyReq, HttpServletRequest req, HttpServletResponse res) {
// retrieve request from the lookup table
       String requestID = request.getHeader("X-Request-ID");
HttpServletRequest originalRequest = requestLookup.get(requestID);
}

- aniruddha
=========
_______________________________________________
jetty-users mailing list
jetty-users@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/jetty-users


--
Olivier

Back to the top