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

Reply via email to