From users-return-267496-archive-asf-public=cust-asf.ponee.io@tomcat.apache.org Mon May 6 16:16:44 2019 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [207.244.88.153]) by mx-eu-01.ponee.io (Postfix) with SMTP id B93AD18060F for ; Mon, 6 May 2019 18:16:43 +0200 (CEST) Received: (qmail 8829 invoked by uid 500); 6 May 2019 16:16:39 -0000 Mailing-List: contact users-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tomcat Users List" Delivered-To: mailing list users@tomcat.apache.org Received: (qmail 8741 invoked by uid 99); 6 May 2019 16:16:39 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 06 May 2019 16:16:39 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id D9703C2926 for ; Mon, 6 May 2019 16:16:38 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.999 X-Spam-Level: * X-Spam-Status: No, score=1.999 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=2, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001] autolearn=disabled Authentication-Results: spamd4-us-west.apache.org (amavisd-new); dkim=pass (2048-bit key) header.d=jini-guru.20150623.gappssmtp.com Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id iuKh-J_dibQG for ; Mon, 6 May 2019 16:16:36 +0000 (UTC) Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with ESMTPS id CC64A61178 for ; Mon, 6 May 2019 16:16:35 +0000 (UTC) Received: by mail-wr1-f66.google.com with SMTP id f7so7704876wrq.1 for ; Mon, 06 May 2019 09:16:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jini-guru.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=MTBl+5PmkvpSuz8ZngbHtQY1gtkrrg5dHjqP2/DUzGQ=; b=zN2W5r9YxbmWtEsx/4MjfxMC5lDUB9gAdEBRW0m1/F7Wr9v2UyP5BgfkLGDZ4ghldO U0Kilevs2GsQrPhEbE+nzfc/U2m72XXvNOOpa0cLvV1pk2MGx7c223UOr5ekq+PxSW2z 7tkS1meKaoLyFCjX6OoSC/W98JB/wy+4KhzPo1Rn7maUuxiJ6uPilg1vOtWHkP6gyoTB hsqP1Va47Nijdn4tPC2tv4xB5BJeRpzMvte1Ul1qlBW9J4HrrJo2g47j8VzLO/FHzFgm jBhM9z84Q6LTBTR9dB4n0QHMmKqk755oJB+EXvJE9PWWAEQejAlt3m3NjNvfc4kfd2lk XG6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=MTBl+5PmkvpSuz8ZngbHtQY1gtkrrg5dHjqP2/DUzGQ=; b=O22kbHh3JI3nKP8ZpDsftYEsmg18B3Ck2mQtLQlW+iENo23+LlWAfhLktEeD9+CRCq dZ4fpfpVtTYkQB91E9MxICVYcZr50BXNSqLIDTsk7PcFsmlMbTCTaefbVyfG2Ae04/PB hKWRzTKPLxERlW/IXjIcXv2OZQqg6Bqtg5QFvMp5z1Gcg6x+k+05So+jBZVW+Oj6z7Vc 8WTT9wIOt4I0VGBkxCcnzOXpdQtXTG8F/mNnrEBmB25eykoPj4U/XntkdkM+d29GSG92 mOcv1cIWfxzrdEyTvBTrmvDecoFvxDfrpBSQmcQuZaeCHO2XcecMYjhOd0BUKZCbWLlu J4Ow== X-Gm-Message-State: APjAAAWqlTVJUMa+ZjxS2iEmolNkzl8saP97+dlXakIR4MF5anCWJB0U h2WyxVTd8b7fLEthwcl2/uM80EbhWMFS2AJ7WeaaU8/fkf1C7Q== X-Google-Smtp-Source: APXvYqyD2eWeY3FLZtCWDCGAhjAshPqDSWLbD1PI1J2CFjVFsBZ1cwReUJdjyzZwz+2fiQFJ/lUvNedUDQsdFGDgVaI= X-Received: by 2002:adf:eb41:: with SMTP id u1mr5591763wrn.218.1557159394702; Mon, 06 May 2019 09:16:34 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Paul Carter-Brown Date: Mon, 6 May 2019 18:16:23 +0200 Message-ID: Subject: Re: Initiating httpservletrequest from inside Tomcat / TomEE To: Tomcat Users List Cc: users@tomee.apache.org Content-Type: multipart/alternative; boundary="00000000000094a67005883a6ccd" --00000000000094a67005883a6ccd Content-Type: text/plain; charset="UTF-8" Hi John, See original request. It's pretty much a Kafka/Servlet proxy/gateway: I'm trying to design a Kafka consumer and producer that will run inside the tomcat jvm and pick up messages off a Kafka topic and translate them into a servlet request and pass it through tomcat and then when the response is complete then translate it into a Kafka message and put it onto another topic as a reply. This way I can reuse our existing jax-rs rest services and expose them as an async api over Kafka. The idea is to make the Kafka messages similar to http in that they would consist of headers and a body. The body would be json. On Mon, May 6, 2019 at 6:13 PM John Dale wrote: > You could try debugging the tomcat code and find out how, right after > it parses the TCP request, it invokes the servlet. You can then > create your own harness for tomcat code after initializing the > appropriate context for the request to tomcat. I don't know off hand > where in the tomcat code this cut point can be found. > > Is this a performance issue, or are you building a proxy? > > What is the problem you're trying to solve? > > On 5/6/19, Paul Carter-Brown wrote: > > Yea, but the issue is that only works when calling in the context of a > > current servlet call. > > > > Here is the kind of problem I want to solve: > > > > @WebServlet(name = "MyExample", urlPatterns = {"/example"}, > loadOnStartup = > > 1) > > public class Example extends HttpServlet { > > > > @PersistenceContext > > private EntityManager em; > > > > @Override > > public void init(ServletConfig config) { > > Thread t = new Thread(() -> { > > while (true) { > > try { > > // Do a GET to /example/ and get the response without > > going out on localhost and back in.... > > // We cant just call doGet as we want the request to > > flow through the servlet filters, do the entitymanager injection etc > > Thread.sleep(10000); > > } catch (Exception e) { > > } > > } > > }); > > t.start(); > > > > } > > > > @Override > > protected void doGet(HttpServletRequest req, HttpServletResponse > resp) > > throws ServletException, IOException { > > // do stuff like use em > > resp.setStatus(200); > > resp.getWriter().write("Hello World"); > > } > > > > } > > > > > > > > > > On Mon, May 6, 2019 at 5:35 PM John Dale wrote: > > > >> For reference, I did find this after searching "calling a servlet > >> programmatically": > >> https://docs.oracle.com/cd/E19146-01/819-2634/abxbn/index.html > >> > >> On 5/6/19, Paul Carter-Brown wrote: > >> > I think we are completely missing each other. Forget sockets - that > was > >> > just an example. I have code running in a Tomcat App server which is > >> > not > >> > managed by Tomcat and is not initiated by anything within Tomcat. That > >> code > >> > now wants to call a servlet hosted in that very same JVM. Any way to > do > >> > that without going out and back in on TCP? > >> > > >> > > >> > On Mon, May 6, 2019 at 5:14 PM John Dale wrote: > >> > > >> >> Sockets are an implementation of TCP/UDP inherently. > >> >> > >> >> Perhaps a mountaintop signal fire? > >> >> > >> >> ;) > >> >> > >> >> John > >> >> > >> >> > >> >> On 5/6/19, Paul Carter-Brown wrote: > >> >> > lol on the Semaphore Telegraph, > >> >> > > >> >> > I can't use a request dispatcher as the request is being initiated > >> from > >> >> > code that has no context. I already have it working with HTTP using > >> >> > asynchttp library, but I want to avoid the overhead. E.g. lets say > I > >> >> wrote > >> >> > my own server socket listener on port 10000 running in the Tomcat > >> >> > JVM > >> >> > and > >> >> > got some request in some propriatary protocol called X. Now I want > >> >> > to > >> >> call > >> >> > a Tomcat servlet in the current JVM with some info I got over X > >> without > >> >> > going out on TCP and back in.... > >> >> > > >> >> > On Mon, May 6, 2019 at 4:40 PM John Dale > wrote: > >> >> > > >> >> >> If you're wanting to forward control to another servlet deployed > in > >> >> >> the same context: > >> >> >> https://www.javatpoint.com/requestdispatcher-in-servlet > >> >> >> > >> >> >> If you are okay going through TCP to facilitate some future or > >> current > >> >> >> distribution of services, Use HTTPURLConnection (not sure what > >> >> >> you're > >> >> >> wanting to do with the result of the request, if anything): > >> >> >> > >> >> >> > >> >> > >> > https://stackoverflow.com/questions/2793150/how-to-use-java-net-urlconnection-to-fire-and-handle-http-requests > >> >> >> > >> >> >> If you need more sophisticated HTTP interactions, Apache maintains > >> >> >> a > >> >> >> very useful library for that: http://hc.apache.org/ > >> >> >> > >> >> >> If these don't work-out for you, rather than using .NET, PHP, > >> >> >> Python, > >> >> >> or some other Java facsimile at best, I recommend using the > >> >> >> semaphore > >> >> >> telegraph: > >> >> >> https://en.wikipedia.org/wiki/Semaphore_telegraph > >> >> >> > >> >> >> Sincerely, > >> >> >> > >> >> >> John > >> >> >> DB2DOM > >> >> >> > >> >> >> On 5/6/19, Paul Carter-Brown wrote: > >> >> >> > Hi John, > >> >> >> > > >> >> >> > Thanks for your feedback. > >> >> >> > > >> >> >> > The request I'm initiating should not or need not carry any > >> >> >> > context > >> >> >> > from > >> >> >> > the originating code. There is also no session to worry about as > >> its > >> >> >> > just > >> >> >> > for rest calls. So basically I have the headers, path and body > >> >> >> > and > >> >> need > >> >> >> to > >> >> >> > generate a http servlet request and get an http servlet response > >> (or > >> >> >> > similar) back. I have this working by calling into localhost but > >> >> >> > ideally > >> >> >> > want to skip the trombone out and back in. > >> >> >> > > >> >> >> > Have you got any basic code examples? > >> >> >> > > >> >> >> > Paul > >> >> >> > > >> >> >> > On Tue, Apr 30, 2019 at 5:27 PM John Dale > >> wrote: > >> >> >> > > >> >> >> >> Another thought .. you can do some request dispatching, but > >> without > >> >> >> >> knowing more about the tools you're using, I can't say for sure > >> >> >> >> if > >> >> >> >> this is the direction you'll want to go. > >> >> >> >> > >> >> >> >> On 4/29/19, Paul Carter-Brown > >> wrote: > >> >> >> >> > Hi > >> >> >> >> > > >> >> >> >> > I'm trying to design a Kafka consumer and producer that will > >> >> >> >> > run > >> >> >> inside > >> >> >> >> the > >> >> >> >> > tomcat jvm and pick up messages off a Kafka topic and > >> >> >> >> > translate > >> >> them > >> >> >> >> into a > >> >> >> >> > servlet request and pass it through tomcat and then when the > >> >> >> >> > response > >> >> >> >> > is > >> >> >> >> > complete then translate it into a Kafka message and put it > >> >> >> >> > onto > >> >> >> another > >> >> >> >> > topic as a reply. This way I can reuse our existing jax-rs > >> >> >> >> > rest > >> >> >> >> > services > >> >> >> >> > and expose them as an async api over Kafka. The idea is to > >> >> >> >> > make > >> >> >> >> > the > >> >> >> >> > Kafka > >> >> >> >> > messages similar to http in that they would consist of > headers > >> >> >> >> > and > >> >> a > >> >> >> >> body. > >> >> >> >> > The body would be json. > >> >> >> >> > > >> >> >> >> > Now I know this could be done by calling localhost with an > >> >> >> >> > http > >> >> call > >> >> >> to > >> >> >> >> > trombone the requests back into tomcat but I'd like to avoid > >> >> >> >> > the > >> >> >> >> associated > >> >> >> >> > latency and overhead. Is it possible to call tomcat directly > >> >> >> >> > in-process. > >> >> >> >> > This does not need to be portable to other containers so can > >> >> >> >> > be > >> >> >> >> > proprietary. > >> >> >> >> > > >> >> >> >> > I'm using tomcat 8. In fact its tomee 8 but guessed this is > >> >> >> >> > more > >> >> >> >> > a > >> >> >> >> > tomcat > >> >> >> >> > question than tomee but have sent to both groups just in > case. > >> >> >> >> > > >> >> >> >> > Thanks for any insights. > >> >> >> >> > > >> >> >> >> > Paul > >> >> >> >> > > >> >> >> >> > >> >> >> > > >> >> >> > >> >> >> > --------------------------------------------------------------------- > >> >> >> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org > >> >> >> For additional commands, e-mail: users-help@tomcat.apache.org > >> >> >> > >> >> >> > >> >> > > >> >> > >> >> --------------------------------------------------------------------- > >> >> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org > >> >> For additional commands, e-mail: users-help@tomcat.apache.org > >> >> > >> >> > >> > > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org > >> For additional commands, e-mail: users-help@tomcat.apache.org > >> > >> > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org > For additional commands, e-mail: users-help@tomcat.apache.org > > --00000000000094a67005883a6ccd--