On 5/6/2019 10:45 AM, 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");
     }

}



If I understand the problem you're trying to solve, it seems like there could be two ways to approach it.

1) Can your service be initialized with the context information it needs to use the request dispatcher? 2) Can the servlets you want to use be refactored so that the underlying functionality is exposed in a way that doesn't require any context?

Hope that helps.

-Terence




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

Reply via email to