File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Threads and Synchronization and the fly likes Need some help on multi-threaded programming Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Threads and Synchronization
Bookmark "Need some help on multi-threaded programming" Watch "Need some help on multi-threaded programming" New topic

Need some help on multi-threaded programming

Jim Barkley

Joined: Jun 23, 2011
Posts: 12
Hi. I'm new to multi-threaded programming and I just wanted to get some insights on how to approach this problem.

I'm trying to create a web service that launches a process on remote computer. This part is actually done.

user->Web service->remote machine executes the given command->Web service->report back to user.

Now I need to make this accessible by multiple users. Please look at the attached picture for the schema.

These are components of the servlet, which will do all the coordination work.

Incoming Job Listener and Job Completion Listener will be running until servlet is terminated. They will be running on a seperate thread.

The Job Queue will be a blocking queue. Servlet will be checking job queue periodically to keep things running.

The job itself is executed on a remote machine. I'm thinking about opening a seperate socket on Completion listener so the remote machine report to this listener, not directly back to the servlet.

So here are my questions.

0. Is that scheme viable?

1. Will blocking queue do the job? The scenario I'm concerned is when multiple users submit a job at the same time, and when a job is submitted while the queue is being accessed for pulling the job out for execution(and vice versa).

2. What is a commonly used method of making threads talk to each other? I'm talking about the communication between the completion listener and the Job queue.

Thanks in advance!

EDIT: I am using Tomcat as the container. My servlet does not implement SingleThreadModel interface.

[Thumbnail for flow.jpg]

Madhan Sundararajan Devaki
Ranch Hand

Joined: Mar 18, 2011
Posts: 312

I believe, exposing the WebService to the public will make it usable to one-and-all.

Not many get the right opportunity !
Chris Hurst
Ranch Hand

Joined: Oct 26, 2003
Posts: 443

I suspect this is more a J2EE question ...

Your running on a J2EE container (Tomcat), generally you shouldn't create threads or open remote sockets directly. Do you intend this to run over a local LAN or the world wide web ?

If you can your job should be submitted to your containers work manager (all threading done by it, I'm not sure which J2EE version your Tomcat supports), the result of the job would be stored on the session (possibly backed for a db) and effectively polled for by your front end or use a messaging solution such as JMS your client then being a JMS listener for job completes. Tomcat I think only implements the client bits of the latest J2EE standard so you might want to move to Glassfish.

If it must be across the web and you don't want to be a JMS client and it must be realtime so you can't poll you need to look at web sockets (Glassfish supports these) but this is very shiny and new, it allows bidirectional communication i.e. the server can push data back to the client an your client can have a job complete event.

If your using Tomcat and everything is local LAN , one non clustered JVM then you could just open sockets , spawn threads, its all just Java but be aware you are not using the container in the way it was intended.

hope that helps ...

"Eagles may soar but weasels don't get sucked into jet engines" SCJP 1.6, SCWCD 1.4, SCJD 1.5,SCBCD 5
I agree. Here's the link:
subject: Need some help on multi-threaded programming
It's not a secret anymore!