views:

95

answers:

4

I have two servlets A & B. On B i intend to have a a method isAvailable() which A will call to check the status. If this method returns true then im going to pass it an object to B.

On doing a bit of reading i'm seeing a couple of options non of which im that familar with. JNDI with remote EJB , RMI or simple HTTP (not sure how youd do the last)

What do you guys think ? Any other options ?

A: 

Are your servlets running in the same application server? If so, you might like to use Spring to inject B into A so that the method can be called directly.

Even if the servlets are running in different containers, you can expose them (using Spring again) as Remote objects and similarly inject B into A (except that this will mean that the Spring container will inject a proxy for the remote object). This has zero footprint in your code (i.e. it's all defined by config files and Spring takes care of everything for you)

oxbow_lakes
There is one instance of Servlet A on a master host and many of Servlet B each on its own host with its own tomcat instances.
wmitchell
A: 

Why not make use of the fact that your infrastructure is already talking HTTP ?

So servlet A can perform an HTTP GET on a particular path to check a status (either sending back an object or checking an HTTP response code - this latter method seems a misuse of status codes, however), and PUT/POST an object if required. I note that you're running across multiple hosts, and this will work in your scenario.

The objects can be serialised using standard Java, or via a representation such as XML - perhaps serialised using XStream).

That would seem to me a pretty straightforward way to leverage off the infrastructure you have.

Brian Agnew
A: 

It looks like this isAvailable() method in Servlet B accesses some kind of "global" data which is stored in the Servlet. Could you extract this object to a separate Singleton which then is available for both Servlets?

mjustin
I was thinking isAvailable() basically checks the CPU overhead on this particular host (servlet). If its able to accept the job it will respond with a true / or a certain HTTP response code.
wmitchell
Why does isAvailable() have to be implemented in the Servlet class then? I would moved it into a common "service layer" package.
mjustin
True True .. mjustin. How might I call this from my Parent Servlet ?
wmitchell
A: 

There is one instance of Servlet A on a master host and many of Servlet B each on its own host with its own tomcat instances.

You can use java.net.URLConnection to programmatically fire a HTTP request. You can find here a simple tutorial.

Let A fire a HTTP request to B and have in B a servlet which listens on those requests and returns the response accordingly. This can be a simple response.getWriter().write("ok"); or so. You can even return a XML string and so on. In A you can then read this value from the InputStream of the URLConnection.

BalusC