tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Paul Carter-Brown <paul.carter-br...@jini.guru>
Subject Re: Initiating httpservletrequest from inside Tomcat / TomEE
Date Mon, 06 May 2019 15:45:41 GMT
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
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message