costin      2003/04/04 14:16:22

  Modified:    http11/src/java/org/apache/coyote/http11 Http11Protocol.java
  Log:
  Unregister components fixes.
  
  There are still few issues, but it seems to be working better for me.
  
  Revision  Changes    Path
  1.22      +60 -24    
jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11Protocol.java
  
  Index: Http11Protocol.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11Protocol.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- Http11Protocol.java       17 Feb 2003 01:41:19 -0000      1.21
  +++ Http11Protocol.java       4 Apr 2003 22:16:22 -0000       1.22
  @@ -68,6 +68,7 @@
   import java.util.*;
   import org.apache.tomcat.util.res.StringManager;
   import org.apache.tomcat.util.threads.ThreadPool;
  +import org.apache.tomcat.util.threads.ThreadWithAttributes;
   import org.apache.tomcat.util.net.*;
   import org.apache.commons.modeler.Registry;
   import javax.management.ObjectName;
  @@ -159,15 +160,26 @@
           log.info(sm.getString("http11protocol.init", "" + ep.getPort()));
   
       }
  -
  +    
  +    ObjectName tpOname;
  +    ObjectName rgOname;
  +    
       public void start() throws Exception {
           if( this.domain != null ) {
               try {
  -                Registry.getRegistry().registerComponent(tp, domain,"ThreadPool",
  -                        "type=ThreadPool,name=http" + ep.getPort());
  +                // XXX We should be able to configure it separately
  +                // XXX It should be possible to use a single TP
  +                tpOname=new ObjectName(domain + ":" + "type=ThreadPool,name=http" + 
ep.getPort());
  +                Registry.getRegistry().registerComponent(tp, tpOname, null );
  +                tp.addThreadPoolListener(new MXPoolListener(this, tp));
               } catch (Exception e) {
                   log.error("Can't register threadpool" );
               }
  +            rgOname=new ObjectName( domain + 
  +                    ":type=GlobalRequestProcessor,name=http" +
  +                    ep.getPort());
  +            Registry.getRegistry().registerComponent( cHandler.global,
  +                    rgOname, null );
           }
   
           try {
  @@ -180,7 +192,12 @@
       }
   
       public void destroy() throws Exception {
  +        log.info("Stoping http11 protocol on " + ep.getPort() + " " + tpOname);
           ep.stopEndpoint();
  +        if( tpOname!=null ) 
  +            Registry.getRegistry().unregisterComponent(tpOname);
  +        if( rgOname != null ) 
  +            Registry.getRegistry().unregisterComponent(rgOname);
       }
       
       // -------------------- Properties--------------------
  @@ -345,11 +362,42 @@
       }
       
       // --------------------  Connection handler --------------------
  +    public static final int THREAD_DATA_PROCESSOR=1;
  +    public static final int THREAD_DATA_OBJECT_NAME=2;
  +    
  +    
  +    static class MXPoolListener implements ThreadPool.ThreadPoolListener {
  +        MXPoolListener( Http11Protocol proto, ThreadPool control ) {
  +            
  +        }
  +
  +        public void threadStart(ThreadPool tp, Thread t) {
  +            System.out.println("Thread start ");
  +        }
  +
  +        public void threadEnd(ThreadPool tp, Thread t) {
  +            // Register our associated processor
  +            // TP uses only TWA
  +            System.out.println("XXXX thread ending ");
  +            ThreadWithAttributes ta=(ThreadWithAttributes)t;
  +            Object tpData[]=ta.getThreadData(tp);
  +            if( tpData==null ) return;
  +            // Weird artifact - it should be cleaned up, but that may break 
something
  +            // and it won't gain us too much
  +            if( tpData[1] instanceof Object[] ) {
  +                tpData=(Object [])tpData[1];
  +            }
  +            ObjectName 
oname=(ObjectName)tpData[Http11Protocol.THREAD_DATA_OBJECT_NAME];
  +            System.out.println("XXXXX thread end " + oname);
  +            if( oname==null ) return;
  +            Registry.getRegistry().unregisterComponent(oname);
  +        }
  +    }
   
       static class Http11ConnectionHandler implements TcpConnectionHandler {
           Http11Protocol proto;
           static int count=0;
  -        RequestGroupInfo global=null;
  +        RequestGroupInfo global=new RequestGroupInfo();
   
           Http11ConnectionHandler( Http11Protocol proto ) {
               this.proto=proto;
  @@ -363,11 +411,7 @@
       
           public Object[] init() {
               Object thData[]=new Object[3];
  -            //CoyoteProcessor adaptor = new CoyoteProcessor(cm);
  -            // XXX Should  be on request
  -            //             if( proto.secure )
  -            //                 
proto.adapter.setSSLImplementation(proto.sslImplementation);
  -
  +            
               Http11Processor  processor = new Http11Processor();
               processor.setAdapter( proto.adapter );
               processor.setThreadPool( proto.tp );
  @@ -376,25 +420,17 @@
               processor.setDisableUploadTimeout( proto.disableUploadTimeout );
               processor.setCompression( proto.compression );
   
  -            //thData[0]=adapter;
  -            thData[1]=processor;
  -            thData[2]=null;
  -
  +            thData[Http11Protocol.THREAD_DATA_PROCESSOR]=processor;
  +            
               if( proto.getDomain() != null ) {
                   try {
  -                    if( global==null ) {
  -                        global=new RequestGroupInfo();
  -                        Registry.getRegistry().registerComponent( global,
  -                                proto.getDomain(), "GlobalRequestProcessor",
  -                                "type=GlobalRequestProcessor,name=http" +
  -                                proto.ep.getPort());
  -                    }
                       RequestInfo rp=processor.getRequest().getRequestProcessor();
                       rp.setGlobalProcessor(global);
  -                    Registry.getRegistry().registerComponent( rp,
  -                            proto.getDomain(), "RequestProcessor",
  -                            "type=RequestProcessor,worker=http" +
  +                    ObjectName rpName=new ObjectName(proto.getDomain() + 
  +                            ":type=RequestProcessor,worker=http" +
                               proto.ep.getPort() +",name=HttpRequest" + count++ );
  +                    Registry.getRegistry().registerComponent( rp, rpName, null);
  +                    thData[Http11Protocol.THREAD_DATA_OBJECT_NAME]=rpName;
                   } catch( Exception ex ) {
                       log.warn("Error registering request");
                   }
  @@ -407,7 +443,7 @@
               Socket socket=null;
               Http11Processor  processor=null;
               try {
  -                processor=(Http11Processor)thData[1];
  +                
processor=(Http11Processor)thData[Http11Protocol.THREAD_DATA_PROCESSOR];
                   
                   if (processor instanceof ActionHook) {
                       ((ActionHook) processor).action(ActionCode.ACTION_START, null);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to