I am running Axis 1.1 with Tomcat 5.0.25 (with Java 1.4.2)

I have a web service call that starts a thread. If axis is stopped by the Tomcat Web Application Manager, the thread continues to run. It doesn't receive an interrupt exception.

Is there a way to have threads started by web services be stopped when Axis stops?
Is there a variable the threads could monitor to see if they should shutdown?


I created a sample .jws and client to illustrate the problem.
 cp ThreadTest.jws $CATALINA_HOME/webapps/axis
 java ThreadTestClient show


/* * ThreadTest.jws * Tests starting and stopping a thread in a web service call. */ public class ThreadTest implements Runnable {

/** Prints out a message every 2 seconds. */
public void
run ()
{
for (int i=0; i<300; i++) {
try {
System.out.println ("Inside thread " + i + " " +
Thread.currentThread().toString());
Thread.sleep(2000); // sleep 2 seconds
} catch (InterruptedException ie) {
System.out.println ("Received interrupt, exiting thread: " + ie);
return;
}
}
}


   /** Starts a thread with the given name. */
   public String
   start(String name)
   {
       ThreadGroup taskGroup = new ThreadGroup("Test Group");
       Thread myThread = new Thread(taskGroup, this, name);
       myThread.setDaemon(true);
       myThread.start();

       return ("started " + name);
   }

   /** Sends the thread with the given name an interrupt. */
   public String
   stop(String name)
   {
       Thread[] tarray = new Thread[100];

       for (int i=0; i<Thread.enumerate(tarray); i++) {
           // XXX: check to make sure it is in the expected thread group
           if (tarray[i].getName().equals(name)) {
               tarray[i].interrupt();
               return ("Thread " + name + " stopped");
           }
       }
       return ("Thread " + name + " not found");
   }

/** Returns a string of all the current active threads. */
public String
show ()
{
String retStr = "";
Thread[] tarray = new Thread[100];
int numThreads = Thread.enumerate(tarray);
if (numThreads == 0) {
return ("No threads found.");
}
for (int i=0; i<numThreads; i++) {
retStr += ((i+1) + ". " + tarray[i].toString() + " " + tarray[i].isInterrupted() + "\n");
}


       return (retStr);
   }
}



/*
* ThreadTestClient.java
* Test client used to test ThreadTest.jws.
*/
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;

import javax.xml.rpc.ParameterMode;

public class ThreadTestClient
{
static void
usage()
{
System.err.println("Usage: ThreadTestClient start <name> | stop <name> | show");
}


   public static void
   main(String [] args)
       throws Exception
   {
       String endpoint = "http://localhost:8080/axis/ThreadTest.jws";;

       if (args == null || args.length < 1) {
           usage();
           return;
       }

       String method = args[0];
       String retStr = null;
       Object [] objs = null;

       Service  service = new Service();
       Call     call    = (Call) service.createCall();

if (method.equals("start") || method.equals("stop")) {
if (args.length != 2) {
usage();
return;
}
call.addParameter (method, XMLType.XSD_STRING, ParameterMode.IN );
objs = new Object [] { args[1] };
} else if (method.equals ("show")) {
objs = new Object [] {};
} else {
usage();
return;
}


       call.setTargetEndpointAddress( new java.net.URL(endpoint) );
       call.setOperationName( method );
       call.setReturnType( XMLType.XSD_STRING );

       retStr = (String) call.invoke(objs);
       System.out.println("Result: " + retStr);
   }
}


This is what I see in catalina.out

Inside thread 7 Thread[hugh,5,Test Group]
Jul 20, 2004 9:42:09 PM org.apache.catalina.core.StandardHostDeployer start
INFO: standardHost.start /axis
Inside thread 8 Thread[hugh,5,Test Group]
Inside thread 9 Thread[hugh,5,Test Group]


Any help would be greatly appreciated.
Thanks

_________________________________________________________________
MSN Toolbar provides one-click access to Hotmail from any Web page � FREE download! http://toolbar.msn.click-url.com/go/onm00200413ave/direct/01/




Reply via email to