Servlet thread programming

Hello,
I have a non-blocking IO channel server that gets instantiated through a thread. The server has to listen for a pre-specified number of clinet connections and close down. This is repeated a few times. The servlet calls two separate threads. One of the two threads calls the server.
The server works just fine till the time it is called from a tomcat servlet. On being called from a servlet the first time, the server starts listening, formats and displays the output correctly. However, the socket does not stop listening on the port[I have specifically put socket.close() in there]. As a result the next socket that gets started, simply dies due a bind error.
The code works perfectly outside the web-container (tomcat) environment.
Also, the ethereal output for both connections is identical; no extra FIN-ACKs or ACKs flying through.
Thanks in anticipation.

I tried increasing the value of the loop as suggested in the earlier mail, but that just kept the server hanging even after all communications.
Just noticed something funky. The servlet page sends the HTTP page to the requesting web-client immediately after the Fin ACK from the TCP client. The server then ACks the FIN ACK but never sends a FIN ACK back to the client. This causes the server to stay up. If the HTTP page is not served out immediately, the communication ends properly.
Any clue on how to do this?
Thanks

Similar Messages

  • Running a Java Multi Thread Program in database

    I have created a multi threaded program in Java and it runs successfully from the command prompt. I want to create a DBMS Job which will wake up at regular intervals and runs the java program(Java stored procedure). Is this possible in 9.2/10G ?? If Yes, will there be any impact on the DB performance/increase memory etc.,
    The database (9.2...) resides on a RH 2.3 AS box.
    Any ideas...
    Thanks,
    Purush

    Purush,
    Java stored procedures cannot be multi-threaded. Well, they can, but the threads will not run in parallel. You may be able to find some more information in the Oracle documentation, which is available from:
    http://tahiti.oracle.com
    Good Luck,
    Avi.

  • Thread programming -  variable might not have been initialized

    Hi there,
    Probably a fairly simple one here (quite new to java), i'm trying to do some thread programming but I get this error.
    ThreadController.java:42: variable dataGeneratorThread might not have been initialized
    dataGeneratorThread.activeCount();
    The bit I dont understand is that I run
    this line here
    for(int i=0; i < JuliaFrame.NO_OF_DATA_GENERATORS; i++){
    dataGenerators[i] = new DataGenerator(JuliaFrame.ImageWidth,JuliaFrame.ImageHeight,inputBuffer);
    dataGeneratorThread = new WorkerThread(dataGenerators,juliaCalc,displayBuffer);
    dataGeneratorThread.start();
    but when I do
    dataGeneratorThread.activeCount()
    is balks.
    I check that the thread is alive first but dont no how to tell the compiler this - obviously NO_OF_DATA_GENERATORS could be 0 in which case the compiler would have issues - I just wish it was more trusting ;)
    Here is some of the code
    runable class{
    new Thread( new ThreadController(inputBuffer,displayBuffer,juliaCalc) ).start();
    public class ThreadController implements Runnable {
    DataBuffer inputBuffer;
    DataBuffer displayBuffer;
    JuliaCalc juliaCalc;
    /** Creates a new instance of ThreadController */
    public ThreadController(DataBuffer inputBuffer,DataBuffer displayBuffer,JuliaCalc juliaCalc) {
    inputBuffer = inputBuffer;
    displayBuffer = displayBuffer;
    juliaCalc = juliaCalc;
    public void run()
    DataGenerator[] dataGenerators = new DataGenerator[JuliaFrame.NO_OF_DATA_GENERATORS];
         WorkerThread dataGeneratorThread;
         for(int i=0; i < JuliaFrame.NO_OF_DATA_GENERATORS; i++){
    dataGenerators[i] = new DataGenerator(JuliaFrame.ImageWidth,JuliaFrame.ImageHeight,inputBuffer);
    dataGeneratorThread = new WorkerThread(dataGenerators[i],juliaCalc,displayBuffer);
    dataGeneratorThread.start();
    dataGeneratorThread.activeCount();
    int nNanoSecsBeforeCheck = 50;
    while(true)
    if(dataGeneratorThread.isAlive()){
    if(dataGeneratorThread.activeCount() > inputBuffer.size())
    public class DataGenerator implements Runnable {
    int nImageWidth;
    int nImageHeight;
    DataBuffer inputBuffer;
    public DataGenerator(int ImageWidth, int ImageHeight,DataBuffer inputBuffer) {
    nImageWidth = ImageWidth;
    nImageHeight = ImageHeight;
    public void run()
    // Non terminating thread - created datapakets and place them in the input buffer
    // Get two radom number withoin a bound and find out bout default highest colou - 3rd value
    while(true)
    int nRandomXCord;
    int nRandomYCord;
    nRandomXCord = ((int)(Math.random() * nImageWidth));
    nRandomYCord = ((int)(Math.random() * nImageHeight));
    DataPacket dpDataPacket = new DataPacket(nRandomXCord, nRandomYCord, 233);
    inputBuffer.put(dpDataPacket);

    Sorry about that, didnt realise.
    Hi there,
    Probably a fairly simple one here (quite new to java), i'm trying to do some thread programming but I get this error.
    ThreadController.java:42: variable dataGeneratorThread might not have been initialized
    The bit I dont understand is that I run
    this line here
    this line here
    for(int i=0; i < JuliaFrame.NO_OF_DATA_GENERATORS; i++){
    dataGenerators = new DataGenerator(JuliaFrame.ImageWidth,JuliaFrame.ImageHeight,inputBuffer);
    dataGeneratorThread = new WorkerThread(dataGenerators,juliaCalc,displayBuffer);
    dataGeneratorThread.start();
    }but when I do
    dataGeneratorThread.activeCount() is balks.
    I check that the thread is alive first but dont no how to tell the compiler this - obviously NO_OF_DATA_GENERATORS could be 0 in which case the compiler would have issues - I just wish it was more trusting ;)
    Here is some of the code
    runable class{
    new Thread( new ThreadController(inputBuffer,displayBuffer,juliaCalc) ).start();
    public class ThreadController implements Runnable {
    DataBuffer inputBuffer;
    DataBuffer displayBuffer;
    JuliaCalc juliaCalc;
    /** Creates a new instance of ThreadController */
    public ThreadController(DataBuffer inputBuffer,DataBuffer displayBuffer,JuliaCalc juliaCalc) {
    inputBuffer = inputBuffer;
    displayBuffer = displayBuffer;
    juliaCalc = juliaCalc;
    public void run()
    DataGenerator[] dataGenerators = new DataGenerator[JuliaFrame.NO_OF_DATA_GENERATORS];
    WorkerThread dataGeneratorThread;
    for(int i=0; i < JuliaFrame.NO_OF_DATA_GENERATORS; i++){
    dataGenerators = new DataGenerator(JuliaFrame.ImageWidth,JuliaFrame.ImageHeight,inputBuffer);
    dataGeneratorThread = new WorkerThread(dataGenerators,juliaCalc,displayBuffer);
    dataGeneratorThread.start();
    dataGeneratorThread.activeCount();
    int nNanoSecsBeforeCheck = 50;
    while(true)
    if(dataGeneratorThread.isAlive()){
    if(dataGeneratorThread.activeCount() > inputBuffer.size())
    public class DataGenerator implements Runnable {
    int nImageWidth;
    int nImageHeight;
    DataBuffer inputBuffer;
    public DataGenerator(int ImageWidth, int ImageHeight,DataBuffer inputBuffer) {
    nImageWidth = ImageWidth;
    nImageHeight = ImageHeight;
    public void run()
    // Non terminating thread - created datapakets and place them in the input buffer
    // Get two radom number withoin a bound and find out bout default highest colou - 3rd value
    while(true)
    int nRandomXCord;
    int nRandomYCord;
    nRandomXCord = ((int)(Math.random() * nImageWidth));
    nRandomYCord = ((int)(Math.random() * nImageHeight));
    DataPacket dpDataPacket = new DataPacket(nRandomXCord, nRandomYCord, 233);
    inputBuffer.put(dpDataPacket);
    }

  • Using nanosleep() in a threaded program cause SIGBUS or SIGSEGV

    Greetings,
    I'm working on a multit-threaded program using Solaris' threads (not POSIX).
    When I call nanosleep() or usleep(), sometimes the program works well, but often I get either a SIGSEGV or a SIGBUS.
    Have a look at the following dbx output using a core file:
    (dbx) threads
    o>    t@1  a  l@1   ?()   signal SIGSEGV in  t_splay()
          t@2  a  l@2   cpu_thread()   LWP suspended in  ___nanosleep()
    (dbx) thread 2
    dbx: unrecognized arg/option '2'
    Use the 'help' command for more information.
    (dbx) thread t@2
    Current function is cpu_thread
      367           nanosleep(&sleep_time, NULL);
    t@2 (l@2) stopped in ___nanosleep at 0xfe5c017c
    0xfe5c017c: ___nanosleep+0x0008:        bcc,a,pt  %icc,___nanosleep+0x18       ! 0xfe5c018c
    (dbx) list
      367           nanosleep(&sleep_time, NULL);
    (dbx)The code used to create the thread:
    thr_create(NULL, 0, cpu_thread, NULL, 0, &tid);Am I missing something?
    Any suggestions are welcome.
    Thanks,
    -Thomas

    t@1 a l@1 ?() signal SIGSEGV in t_splay() Most likely a corrupted malloc heap. Thread t@1 is crashing
    somewhere inside malloc() or free().
    Use libumem(3LIB) or dbx's access / memory checking support
    to find out where you're corrupting the malloc heap.
    t@2 a l@2 cpu_thread() LWP suspended in ___nanosleep() The nanosleeping thread isn't responsible for the crash.
    The t@1 thread is the culprit. Print a stack trace for thread t@1.

  • Multiple Servlet Threads - per HttpSession

              Can there be concurrent Servlet threads on a single HttpSession in cases where
              there are multiple frames on the Browser Window, or if the user has multiple Windows
              open in the same Browser session? Or is it the case that the multiple requests
              on that HttpSession are synchronized to be done in sequence (WebLogic 6.1 as Web
              Server).
              If there can be concurrent threads then how are non-repeatable reads handled for
              objects stored in the HttpSession. For example two threads pick up object A from
              HttpSession, and overwrite each other changes when they set them back in HttpSession.
              Thanks,
              Pradeep
              

              Thanks but how does that protect against non-repeatable reads?
              Even if there is a synchronized session object in HttpSession still nothing to
              stop from concurrent threads from overwriting each other's settings if the threads
              picked up a value from session object, did some processing and wrote it back.
              (This is almost an optimistic concurrency type scenario)?
              Pradeep
              Alexander Petrushko <[email protected]> wrote:
              >Pradeep Behl wrote:
              >
              >> Can there be concurrent Servlet threads on a single HttpSession in
              >cases where
              >> there are multiple frames on the Browser Window, or if the user has
              >multiple Windows
              >> open in the same Browser session? Or is it the case that the multiple
              >requests
              >> on that HttpSession are synchronized to be done in sequence (WebLogic
              >6.1 as Web
              >> Server).
              >>
              >> If there can be concurrent threads then how are non-repeatable reads
              >handled for
              >> objects stored in the HttpSession. For example two threads pick up
              >object A from
              >> HttpSession, and overwrite each other changes when they set them back
              >in HttpSession.
              >
              >It's up to the application to prevent the threads from stepping on each
              >other when it
              >comes to HttpSession. You can create a thread-safe session class, store
              >your session
              >objects in the instance of that and then have HttpSession store the thread-safe
              >impl.
              >
              >Cheers,
              >
              >Alex
              >
              >
              

  • Multi threaded programming

    I am quite new to multi threaded programming.
    The problem I am facing in my code is as follows:
    I can instantiate 1-10 threads from my controller class. For example if my controller class generates 10 threads, 5 threads
    finish the task they are assigned to do(i.e send SMS and Update the Database) and the other 5 threads eventhough send SMS but
    get stuck when they are supposed to update the Database (this is inferred from the logs).
    Due to this problem my controller class remains in a wait state as I am using the join() method and some of the threads never
    join.
    Another interesting observation is that it always happens that the thread numbered 0-5 always get stuck at the exact point
    where database has to be updated and thread number 6-10 complete their task. Same is the case when i instantiate 2 threads, i
    thread completes its task and another thread gets stuck, again at the same point.
    I am using Connection Pooling to connect to the database.
    I am sure that the problem is with the query
    int j=dbObject.execute_pst("UPDATE table SET flag='true' WHERE message IN("+trueFlag+")",con);
    where true flag is a comma seperated string containing some ID's.
    What i cannot understand is why some of the threads (almost 50% of them), work fine with this query and the others get stuck
    (i.e. just wait at this query during runtime)

    The problem must lie in the connection, as the SQL statement is to basic to cause an endless loop inside the DBMS. If you are in doubt, try the setMaxRows() method of the Statement interface, I'm using Sybase and it also limits the number of rows processed in update and delete statements (which I'm pretty sure is buggy, but you can still try it).
    Which DBMS are you using by the way?

  • Servlet thread pool

    Is there any way I can create my own init() for the threads in the servlet thread pool (by overriding some method or through other means)? (Not to be confused with the servlet's init().)

    web server itself is a thread pool implementation, unlesss your thread has other purpose, if not it is suited and enough for you do not implement another thread for it. If you want some init method, you can call from other class before start of your thread pooling.
    Hopefully can help you...

  • Thread program: Strange output

    Hi,
    I have written a simple thread program. Previously I was trying to print hello world in the run method, the I changed it to print the value of a static data member, but strangely its still printing hello World. However if I change the print statement in the main method, it is reflected in the output but the changes to the print statement are not. Its always hello World output. I have changed the name of file, recompile it, close the shell window, restarted the computer but always the output is hello world. Can somebody help me with that. My objetive is to prove that data segment is shred in threads.
    public class Share2 extends Thread{
    static int Data=10;
       public void run ( ) {
        Data=Data+10;
         System.out.println("Data="+Data);
      public static void main (String[ ] args ) {
        First obj=new First ( );
        obj.start ( );
        System.out.println("Data ^^^^in!!! 9999main****="+Data);
    }D:\javaprogs\misc\threads>javac Share2.java
    D:\javaprogs\misc\threads>java Share2
    Data ^^^^in!!! 9999main****=10
    Hello World
    D:\javaprogs\misc\threads>javac Share2.java
    D:\javaprogs\misc\threads>java Share2
    Data ^^^^in!!! 9999main****=10
    Hello World
    D:\javaprogs\misc\threads>
    Zulfi.

    public class Share2 extends Thread{
    static int Data=10;
    public void run ( ) {
    Data=Data+10;
    System.out.println("Data="+Data);
    public static void main (String[ ] args ) {
    First obj=new First ( );<<<<< what is First? >>>>>>
    obj.start ( );
    System.out.println("Data ^^^^in!!!
    n!!! 9999main****="+Data);
    D:\javaprogs\misc\threads>javac Share2.java
    D:\javaprogs\misc\threads>java Share2
    Data ^^^^in!!! 9999main****=10
    Hello World
    D:\javaprogs\misc\threads>javac Share2.java
    D:\javaprogs\misc\threads>java Share2
    Data ^^^^in!!! 9999main****=10
    Hello World
    D:\javaprogs\misc\threads>
    Zulfi.

  • Servlet Thread Pools for iPlanet WS 4.1

    We have iPlanet WS 4.1 SP 5, running on HP UX. Wanted to make sure servlets run fast, so set up servlet thread pool. Initial result was that even the startup servlet could not be loaded, got stack overflow. Reduced number of threads from 60 to 5. Now startup servlet kicked off OK, but a subsequent servlet processing a request bombed with same error. This is obviously some kind of resource issue; how does one allocate enough memory or whatever it needs to handle the thread pool? Do I really even need a thread pool?

    Thanks, and a follow-up question: at that reference, it seemed to imply there is really no need to allocate a user thread pool if running on Unix. Could even slow down the application. Am I likely to be OK with about 300 concurrent users if I don't allocate a thread pool? I was afraid they'd be single-threaded through the front controller servlet if I did not specifically allocate and use a thread pool, but perhaps multiple threads are already built into the container?

  • Are servlets thread safe??

    Are servlets thread safe?? if not, then how to make them thread safe.

    Hi,
    servlets aren't thread-safe; you can make them thread-safe by implementing the interface javax.servlet.SingleThreadModel
    From the javadoc:
    public interface SingleThreadModel
    Ensures that servlets handle only one request at a time. This interface has no methods.
    If a servlet implements this interface, you are guaranteed that no two threads will execute concurrently in the servlet's service method. The servlet container can make this guarantee by synchronizing access to a single instance of the servlet, or by maintaining a pool of servlet instances and dispatching each new request to a free servlet.
    If a servlet implements this interface, the servlet will be thread safe. However, this interface does not prevent synchronization problems that result from servlets accessing shared resources such as static class variables or classes outside the scope of the servlet.

  • Thread Programming and Condition.Await

    I'm trying to get better acquainted with threaded programming by building a mock music player. It's not going over so well
    What am I doing wrong in the code snipped below? The snippet below is inside the run() method of the MusicPlayer class.
    It seems that it simply doesn't excute as intended. The behavior I want is:
    - When in Off mode: do nothing
    - When in Playing mode: Wait until song finishes, then remove song from playlist (call PlaySong)
    - When in Pause mode: Wait (pauseTimeOut) milliseconds, and if nothing happens, go to Off mode.
    The thread runs fine, but it seems that it waits forever in whatever state it is in.
    I apologize for the weird if statements..
    while (alive) {
                   System.out.println("State: "+state);
                   switch (state) {
                   case Off:
                        System.out.println("System is off");
                        try { cond.await(); }
                        catch(InterruptedException e) { alive = false; }
                        break;
                   case Paused:
                        boolean stillWaiting=true;
                        System.out.println("Waiting..");
                        try { stillWaiting=cond.await(pauseTimeOut, TimeUnit.MILLISECONDS); }
                        catch(InterruptedException e) { alive = false; }
                        if(stillWaiting) {
                             //Do nothing
                        } else if (state == States.Paused) {
                             state=States.Off;
                        break;
                   case Playing:
                        System.out.println("Playing..");
                        if(playlist == 0) {
                             state = States.Paused;
                        } else {
                             boolean waitingEndSong=true;
                             try { waitingEndSong=cond.await(songTime, TimeUnit.MILLISECONDS); }
                             catch(InterruptedException e) { alive = false; }
                             if(waitingEndSong) {
                                  //Do nothing
                             } else if (state == States.Playing) {
                                  PlaySong();
                             break;
                        try { cond.await(); }
                        catch(InterruptedException e) { alive = false; }
                        break;
                   default:
                        alive = false;
    }

    To get better help sooner, post a SSCCE that clearly demonstrates the problem.
    Use 2 to 4 spaces, not tabs, for indentation. Most members won't take the trouble to read code that is too deeeply indented. I know I don't.
    luck, db

  • Need help with java thread program

    Hi
    I have an applet which does some painting etc, i need to write a thread which runs in background, and if there is no user activity for 30 min will refresh the screen.
    I have one good thing that all user options go from one program so i know when user does some thing.
    How do i write this thread program?
    1. I need this program to start counter as soon as some activity is done by user
    2. When user does some thing stop this thread
    3. when user completes his action restart the thread with 30 min timer.
    4. when there is no activity for 30 min refresh the screen
    Any help will be really good
    Ashish

    Not sure what the problem is. Your pseudo code looks good to me.
    The only suggestion I would make is that your use a Timer so you don't have to worry about creating your own Thread. You schedule a Timer to fire in 30 minutes. Everytime you have activiity you cancel the timer and reschedule it.

  • Single Threaded Program

    What do you mean by a single threaded program?? For example I have a single threaded word processor which can do only one task at a time. Does this mean that there is one and only thread which is carrying out all tasks one at a time??Say,formatting the document and then printing??I think I'm very near to it but not getting it properly.Please help.Thanks a lot.

    A single threaded program is a normal program that has only one thread. That doesn't mean that it can do only one task at a time, but that one thread is performing all the tasks.

  • HELP!....GUI crashes when i call a multi-threaded program from it

    Hi..I have encountered a problem in my end of year project, which i cant see to solve. The problem is i am starting a multi-threaded program for a JButton on a GUI. All though this starts the other program it crashes the GUI completely how do i stop this.
    this is the code i use to call the threaded program.
    public void actionPerformed(ActionEvent e)
    Object target=e.getSource();
    String line = new String();
    if( target==b1 )
         try
    cl = new client();
         cl.startup();
         catch(Exception ex){ex.printStackTrace();}
    thanks Mike

    No there is no exceptions being given. this is one of the reasons why i dont no what to do. i thought myself that the threaded was taking all the resources and not going back to the GUI. if this is the case is there anyway that i can call back the GUI and keep the threaded program running?
    thanks
    mike.

  • Paul Hyde's Java Thread Programming

    I have Paul Hyde's Java Thread Programming and I am wondering if it is a comprehensive book for learning the nuts n bolts of threads. I know how to use threads however I want to learn the inner details. Doug Lea's book is perhaps a better option but Paul Hyde's book seems more readiable.
    Any comments are appreciated.
    cheers

    Sounded interesting, found this link
    http://www.javaspecialists.co.za/archive/Issue056.html

Maybe you are looking for