I didn't think that TomEE was Tomcat. Wasn't it it's own thing??? I mean TomEE is this separate project maintained by this up here in Seattle vs Tomcat which is an Apache Project.
Owen Rubel oru...@gmail.com On Mon, May 6, 2019 at 9:16 AM Paul Carter-Brown <paul.carter-br...@jini.guru> wrote: > 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 > > > > >