I just have another approach of solving the same problem - 1. My Jetty server will receive a doGET which will call a third party API. 2. The third-party API after processing above call will callback doPOST. 3. The doGET will send a response only when the callback at doPOST is received.
But can asyncMiddleManServlet work for this? Or I need to use some other mechanism? Best, Aniruddha ======== ᐧ On Wed, Jul 7, 2021 at 11:51 PM Aniruddha Tekade <atek...@cloudian.com> wrote: > Hi, > > I tried understanding the AsyncMiddleManServlet from example at this - > https://groups.google.com/g/dropwizard-user/c/DK3LsgbbU8Y?pli=1. > > But how can this work for my case? I mean how can I use ContentTransformer to > respond to the original request? > Best, > Aniruddha > ======== > > ᐧ > > On Wed, Jul 7, 2021 at 9:58 PM Olivier Lamy <ol...@webtide.com> wrote: > >> 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@eclipse.org> 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@eclipse.org >>> To unsubscribe from this list, visit >>> https://www.eclipse.org/mailman/listinfo/jetty-users >>> >> >> >> -- >> Olivier >> _______________________________________________ >> jetty-users mailing list >> jetty-users@eclipse.org >> To unsubscribe from this list, visit >> https://www.eclipse.org/mailman/listinfo/jetty-users >> >
_______________________________________________ jetty-users mailing list jetty-users@eclipse.org To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/jetty-users