[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-1394?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15611961#comment-15611961
 ] 

wu wen commented on ZOOKEEPER-1394:
-----------------------------------

i think this is a class loading time problem,If ZooTrace.xxx()  has been used 
already before the application stopped, it can be loaded normally.

{code:java}
class SendThread extends Thread {
        //..igonre       
        @Override
        public void run() {
          //..igonre

            //*********for example, If ZooTrace is called here, the problem 
does not occur.*******
            ZooTrace.logTraceMessage(LOG, ZooTrace.getTextTraceLevel(),
                                     "SendThread starting loop.");

            while (state.isAlive()) {
                //..igonre
                //there is loop

            }

            //...executing

            /***At this time, may be this web application instance has been 
stopped already.**/
        
   /**java.lang.IllegalStateException: Illegal access: this web application 
instance has been stopped already. Could not         load 
[org.apache.zookeeper.server.ZooTrace]**/
            //The container seems to think this is an illegal load
            ZooTrace.logTraceMessage(LOG, ZooTrace.getTextTraceLevel(),
                                     "SendThread exitedloop.");
        }

        void close() {
            state = States.CLOSED;
            clientCnxnSocket.wakeupCnxn();
        }
       
    }
{code}

> ClassNotFoundException on shutdown of client
> --------------------------------------------
>
>                 Key: ZOOKEEPER-1394
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1394
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: java client
>    Affects Versions: 3.4.2
>         Environment: OS X 10.7 java version "1.6.0_29"
>            Reporter: Herman Meerlo
>            Assignee: wu wen
>            Priority: Minor
>         Attachments: ZOOKEEPER-1394.patch
>
>
> When close() is called on the ZooKeeper instance from a ContextListener 
> (contextDestroyed) there is no way to synchronize with the fact that the 
> EventThread and SendThread have actually finished their work. The problem 
> lies in the SendThread which makes a call to ZooTrace when it exits, but that 
> class has not been loaded yet. Because the ContextListener could not 
> synchronize with the death of the threads the classloader has already 
> disappeared, resulting in a ClassNotFoundException.
> My personal opinion is that the close() method should probably wait until the 
> event and send thread have actually died.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to