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 <jcdw...@gmail.com> 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 <paul.carter-br...@jini.guru> 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 <jcdw...@gmail.com> 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 <paul.carter-br...@jini.guru> 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 <jcdw...@gmail.com> wrote: > >> > > >> >> Sockets are an implementation of TCP/UDP inherently. > >> >> > >> >> Perhaps a mountaintop signal fire? > >> >> > >> >> ;) > >> >> > >> >> John > >> >> > >> >> > >> >> On 5/6/19, Paul Carter-Brown <paul.carter-br...@jini.guru> 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 <jcdw...@gmail.com> > 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 <paul.carter-br...@jini.guru> 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 <jcdw...@gmail.com> > >> 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 <paul.carter-br...@jini.guru> > >> 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-unsubscr...@tomcat.apache.org > >> >> >> For additional commands, e-mail: users-h...@tomcat.apache.org > >> >> >> > >> >> >> > >> >> > > >> >> > >> >> --------------------------------------------------------------------- > >> >> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > >> >> For additional commands, e-mail: users-h...@tomcat.apache.org > >> >> > >> >> > >> > > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > >> For additional commands, e-mail: users-h...@tomcat.apache.org > >> > >> > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > >