tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From John Dale <jcdw...@gmail.com>
Subject Re: Initiating httpservletrequest from inside Tomcat / TomEE
Date Mon, 06 May 2019 16:40:30 GMT
I would trace tomcat and recreate a servlet request .. see if I could
hack it in that way (assuming that localhost traffic isn't fast
enough).  Normalizing on HTTP/TCP will be more maintainable, though?

Can somebody suggest a good place for a breakpoint?

Any other suggestions?

John


On 5/6/19, Paul Carter-Brown <paul.carter-brown@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 <jcdwrrc@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-brown@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 <jcdwrrc@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-brown@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 <jcdwrrc@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-brown@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 <jcdwrrc@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-brown@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 <jcdwrrc@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-brown@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-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
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message