Hi,

Zookeeper jar had been under  CLASSPATH.

 

thanks,

bob
 

> From: mgai...@hotmail.com
> To: users@tomcat.apache.org
> Subject: RE: Illegal access: this web application instance has been stopped 
> already and NoClassDefFoundError
> Date: Tue, 11 Jun 2013 06:37:52 -0400
> 
> I
> 
> > > > org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1115)
> > > >
> > > > 
> > > Caused by: java.lang.ClassNotFoundException:
> > > org.apache.zookeeper.server.ZooTrace
> MG>put zookeeper*.jar on CLASSPATH
> 
> > > > at
> > > > org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)
> > > >
> > > > 
> > > at
> > > org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
> > > > ... 1 more
> > > > 
> > > > 
> > > > 
> > > > 
> > > > at the same time,the following is also in catalina.out:
> > > > 
> > > > 
> > > > 
> > > > INFO: Illegal access: this web application instance has been
> > > > stopped already. Could not load
> > > > org.apache.zookeeper.server.ZooTrace. The eventual following stack
> > > > trace is caused by an error thrown for debugging purposes as well
> > > > as to attempt to terminate the thread which caused the illegal
> > > > access, and has no functional impact. 
> > > > java.lang.IllegalStateException at
> > > > org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1597)
> > > >
> > > > 
> > > at
> > > org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
> > > > at
> > > > org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1115)
> > > >
> > > > 
> > > > 
> > > > 
> > > > I searched google and mail list ,couldn't find any solution,please
> > > > help me.
> > > > 
> > > > 
> > > > Enviroment info:
> > > > 
> > > > JDK:1.6.0_45
> > > > 
> > > > Tomcat:7.0.40
> > > > 
> > > > Zookeeper:3.4.5
> > > 
> > > Can you give us any more of the stack trace? It looks like this is
> > > happening during shutdown, but all the ServletContextListeners should
> > > complete before the WebappClassLoader starts shedding its loaded classes.
> > > 
> > > Are you explicitly shutting-down the ClientCnxn thread in a SCL's
> > > destroy() method? If not, you need to do that.
> > > 
> > 
> > Sorry,I can't get any more of the stack trace.
> > 
> > We wrapped zookeepr client as a spring bean and invoked method "close" of 
> > zookeeper in "destory-method" of bean,in that method "close",zookeeper Send 
> > Thread was closed.
> > When tomcat was shut down, Spring closed it's container and bean was 
> > detroyed, then "destroy-method" of bean was invoked.
> > I'am confusing why is Send Thread of Zookeeper seemed to exit slower than 
> > the WebappClassLoader shedding its loaded classes. 
> > 
> > ps: details of zookeeper closing
> > org.apache.zookeeper.Zookeeper
> > public synchronized void close() throws InterruptedException {
> > if (!cnxn.getState().isAlive()) {
> > if (LOG.isDebugEnabled()) {
> > LOG.debug("Close called on already closed client");
> > }
> > return;
> > }
> > if (LOG.isDebugEnabled()) {
> > LOG.debug("Closing session: 0x" + Long.toHexString(getSessionId()));
> > }
> > try {
> > cnxn.close();
> > } catch (IOException e) {
> > if (LOG.isDebugEnabled()) {
> > LOG.debug("Ignoring unexpected exception during close", e);
> > }
> > }
> > LOG.info("Session: 0x" + Long.toHexString(getSessionId()) + " closed");
> > }
> > ----------------------------------------------------------------------------------------------------------------------
> > org.apache.zookeeper.ClientCnxn
> > public void close() throws IOException {
> > if (LOG.isDebugEnabled()) {
> > LOG.debug("Closing client for session: 0x"
> > + Long.toHexString(getSessionId()));
> > }
> > try {
> > RequestHeader h = new RequestHeader();
> > h.setType(ZooDefs.OpCode.closeSession);
> > submitRequest(h, null, null, null);
> > } catch (InterruptedException e) {
> > // ignore, close the send/event threads
> > } finally {
> > disconnect();
> > }
> > }
> > 
> > 
> > public void disconnect() {
> > if (LOG.isDebugEnabled()) {
> > LOG.debug("Disconnecting client for session: 0x"
> > + Long.toHexString(getSessionId()));
> > }
> > sendThread.close();
> > eventThread.queueEventOfDeath();
> > }
> > -------------------------------------------------------------------------------------------------
> > 
> > 
> > org.apache.zookeeper.ClientCnxn.SendThread
> > void close() {
> > state = States.CLOSED;
> > clientCnxnSocket.wakeupCnxn();
> > }
> > 
> > 
> > @Override
> > public void run() {
> > clientCnxnSocket.introduce(this,sessionId);
> > clientCnxnSocket.updateNow();
> > clientCnxnSocket.updateLastSendAndHeard();
> > int to;
> > long lastPingRwServer = System.currentTimeMillis();
> > while (state.isAlive()) {
> > try {
> > if (!clientCnxnSocket.isConnected()) {
> > if(!isFirstConnect){
> > try {
> > Thread.sleep(r.nextInt(1000));
> > } catch (InterruptedException e) {
> > LOG.warn("Unexpected exception", e);
> > }
> > }
> > // don't re-establish connection if we are closing
> > if (closing || !state.isAlive()) {
> > break;
> > }
> > startConnect();
> > clientCnxnSocket.updateLastSendAndHeard();
> > }
> > if (state.isConnected()) {
> > // determine whether we need to send an AuthFailed event.
> > if (zooKeeperSaslClient != null) {
> > boolean sendAuthEvent = false;
> > if (zooKeeperSaslClient.getSaslState() == 
> > ZooKeeperSaslClient.SaslState.INITIAL) {
> > try {
> > zooKeeperSaslClient.initialize(ClientCnxn.this);
> > } catch (SaslException e) {
> > LOG.error("SASL authentication with Zookeeper Quorum member failed: " + e);
> > state = States.AUTH_FAILED;
> > sendAuthEvent = true;
> > }
> > }
> > KeeperState authState = zooKeeperSaslClient.getKeeperState();
> > if (authState != null) {
> > if (authState == KeeperState.AuthFailed) {
> > // An authentication error occurred during authentication with the 
> > Zookeeper Server.
> > state = States.AUTH_FAILED;
> > sendAuthEvent = true;
> > } else {
> > if (authState == KeeperState.SaslAuthenticated) {
> > sendAuthEvent = true;
> > }
> > }
> > }
> > if (sendAuthEvent == true) {
> > eventThread.queueEvent(new WatchedEvent(
> > Watcher.Event.EventType.None,
> > authState,null));
> > }
> > }
> > to = readTimeout - clientCnxnSocket.getIdleRecv();
> > } else {
> > to = connectTimeout - clientCnxnSocket.getIdleRecv();
> > }
> > 
> > if (to <= 0) {
> > throw new SessionTimeoutException(
> > "Client session timed out, have not heard from server in "
> > + clientCnxnSocket.getIdleRecv() + "ms"
> > + " for sessionid 0x"
> > + Long.toHexString(sessionId));
> > }
> > if (state.isConnected()) {
> > int timeToNextPing = readTimeout / 2
> > - clientCnxnSocket.getIdleSend();
> > if (timeToNextPing <= 0) {
> > sendPing();
> > clientCnxnSocket.updateLastSend();
> > } else {
> > if (timeToNextPing < to) {
> > to = timeToNextPing;
> > }
> > }
> > }
> > // If we are in read-only mode, seek for read/write server
> > if (state == States.CONNECTEDREADONLY) {
> > long now = System.currentTimeMillis();
> > int idlePingRwServer = (int) (now - lastPingRwServer);
> > if (idlePingRwServer >= pingRwTimeout) {
> > lastPingRwServer = now;
> > idlePingRwServer = 0;
> > pingRwTimeout =
> > Math.min(2*pingRwTimeout, maxPingRwTimeout);
> > pingRwServer();
> > }
> > to = Math.min(to, pingRwTimeout - idlePingRwServer);
> > }
> > clientCnxnSocket.doTransport(to, pendingQueue, outgoingQueue, 
> > ClientCnxn.this);
> > } catch (Throwable e) {
> > if (closing) {
> > if (LOG.isDebugEnabled()) {
> > // closing so this is expected
> > LOG.debug("An exception was thrown while closing send thread for session 0x"
> > + Long.toHexString(getSessionId())
> > + " : " + e.getMessage());
> > }
> > break;
> > } else {
> > // this is ugly, you have a better way speak up
> > if (e instanceof SessionExpiredException) {
> > LOG.info(e.getMessage() + ", closing socket connection");
> > } else if (e instanceof SessionTimeoutException) {
> > LOG.info(e.getMessage() + RETRY_CONN_MSG);
> > } else if (e instanceof EndOfStreamException) {
> > LOG.info(e.getMessage() + RETRY_CONN_MSG);
> > } else if (e instanceof RWServerFoundException) {
> > LOG.info(e.getMessage());
> > } else {
> > LOG.warn(
> > "Session 0x"
> > + Long.toHexString(getSessionId())
> > + " for server "
> > + clientCnxnSocket.getRemoteSocketAddress()
> > + ", unexpected error"
> > + RETRY_CONN_MSG, e);
> > }
> > cleanup();
> > if (state.isAlive()) {
> > eventThread.queueEvent(new WatchedEvent(
> > Event.EventType.None,
> > Event.KeeperState.Disconnected,
> > null));
> > }
> > clientCnxnSocket.updateNow();
> > clientCnxnSocket.updateLastSendAndHeard();
> > }
> > }
> > }
> > cleanup();
> > clientCnxnSocket.close();
> > if (state.isAlive()) {
> > eventThread.queueEvent(new WatchedEvent(Event.EventType.None,
> > Event.KeeperState.Disconnected, null));
> > }
> > ZooTrace.logTraceMessage(LOG, ZooTrace.getTextTraceLevel(),
> > "SendThread exitedloop.");//at this line, error occurs.
> > }
> > --------------------------------------------------------------------------------------------------------------
> > 
> > Regards,
> > Bob
> > 
> > 
> > 
> > 
> > 
> > 
> 
> 
                                          

Reply via email to