users@grizzly.java.net

Re: Grizzly server : Uncatched Exception GRAVE: WorkerThreadImpl unexpected exception:

From: Survivant <survivant00_at_gmail.com>
Date: Tue, 2 Dec 2008 18:18:18 -0500

I didn'T had time.. I swtich project at my job, so I'll have to do it on lunch time.. I'll try tomorrow.

  ----- Original Message -----
  From: Oleksiy Stashok
  To: users_at_grizzly.dev.java.net
  Sent: Monday, December 01, 2008 4:10 PM
  Subject: Re: Grizzly server : Uncatched Exception GRAVE: WorkerThreadImpl unexpected exception:


  I've commited fix on the trunk (changed API a little bit)... so now AsyncQueue catches all kind of exceptions, not just IOException.
  Can you pls. check it?


  Thanks.


  WBR,
  Alexey.


  On Dec 1, 2008, at 22:03 , Survivant 00 wrote:


    agree for the trt/catch

    the important thing for me, is not to see that in the console. (the exception not catched) .

    try to explain that is not a bug.. it's the feature from the framework :)




    2008/12/1 Oleksiy Stashok <Oleksiy.Stashok_at_sun.com>

      Hi,


      seems channel close happens at time, when async. write is being processed... The internal SocketChannelImpl's VMChannel appears to be null at some moment.
      I think we have to wrap this to try-catch and log on FINE level.


      What do you think?


      Thanks.


      WBR,
      Alexey.


      On Dec 1, 2008, at 14:55 , Survivant 00 wrote:


        I have that in my client when he does a close


        /**
             * close the client connection
             */
            public synchronized void close(){
                
                if(s_logger.isDebugEnabled()){
                    s_logger.debug("ClientConnection close");
                }
                
                 // No more bytes can be read from the channel
                f_selectorHandler.getSelectionKeyHandler().cancel(f_key);
                
                // unsubscribe to quotefeed
                f_manager.unsubcribeClient(this);
            }






        2008/12/1 Survivant 00 <survivant00_at_gmail.com>

          I'll try to get the important parts :


          in the server

          public class QuoteFeedResponseHandler extends QuoteResponseHandler {

              private static final Logger s_logger = LoggerFactory.getLogger(QuoteFeedResponseHandler.class);
              
              public void sendLastUpdateToClient(ClientConnectionHandler clientConnectionHandler) {
                  if(f_lastQuoteUpdate==null){
                      return;
                  }
                  
                  ByteBuffer writeBuffer = ByteBuffer.allocateDirect(1000);
                  
                  writeBuffer.put(f_lastQuoteUpdate.toString().getBytes());
                  
                  writeBuffer.flip();
                  
                  if(s_logger.isDebugEnabled()){
                      s_logger.debug("SENDING LAST QUOTE UPDATE TO CLIENT ");
                  }
                  
                  try {
                      if(clientConnectionHandler.getKey().isValid()){
                          clientConnectionHandler.getSelectorHandler().getAsyncQueueWriter().write(clientConnectionHandler.getKey(), writeBuffer);
                      } else {
                          // le client n'est pas connecte
                          clientConnectionHandler.close();
                      }
                  } catch (IOException e) {
                      s_logger.warn("sendLastUpdateToClient", e);
                      
                      // le client n'est pas connecte
                      clientConnectionHandler.close();
                  }
              }




              public void init(){
                  
                  if(s_logger.isDebugEnabled()){
                      s_logger.debug("listening for incomming TCP Connections on port : " + f_port);
                  }
                  
                  try {
                      
                      f_controller = new Controller();
                      TCPSelectorHandler tcpSelectorHandler = new TCPSelectorHandler();
                      tcpSelectorHandler.setPort(f_port);
                  
                      Pipeline pipeline = new DefaultPipeline();
                      pipeline.setMaxThreads(5);
                      
                      f_controller.setPipeline(pipeline);
                      
                      
                      BaseSelectionKeyHandler selectionKeyHandler = new BaseSelectionKeyHandler();
                      
                      // to be notify when a client close the connection
                      selectionKeyHandler.setConnectionCloseHandler(new ConnectionCloseHandler() {

                          public void locallyClosed(SelectionKey key) {
                                 s_logger.debug(key + " is being locally cancelled");
                                 f_quoteManager.getCacheManager().remove(key);
                             }

                             public void remotlyClosed(SelectionKey key) {
                                 s_logger.debug(key + " is being remotly cancelled (connection closed)");
                                 f_quoteManager.getCacheManager().remove(key);
                             }
                      });
                      
                      tcpSelectorHandler.setSelectionKeyHandler(selectionKeyHandler);
                      
                      f_controller.addSelectorHandler(tcpSelectorHandler);
                      
                      
                      QuoteQueryProtocolFilter protocolParser = new QuoteQueryProtocolFilter();
                      QuoteQueryManagerFilter quoteManagerFilter = new QuoteQueryManagerFilter(f_quoteManager);
                         
                      final ProtocolChain protocolChain = new DefaultProtocolChain();
                      protocolChain.addFilter(protocolParser);
                      protocolChain.addFilter(quoteManagerFilter);
                      ((DefaultProtocolChain) protocolChain).setContinuousExecution(true);


                      ProtocolChainInstanceHandler pciHandler = new DefaultProtocolChainInstanceHandler() {

                         public boolean offer(ProtocolChain protocolChain) {
                             return false;

                         }

                         public ProtocolChain poll() {

                             return protocolChain;
                         }
                     };

                     f_controller.setProtocolChainInstanceHandler(pciHandler);
                     try {
                         f_controller.start();
                      } catch (IOException e) {
                          e.printStackTrace();
                      }
                      
                  } catch (Exception e) {
                      f_quoteManager.exit(-10);
                  }
              }


          2008/12/1 Oleksiy Stashok <Oleksiy.Stashok_at_sun.com>


            Hi,

            can you pls. show the code? Seems there is async write preprocessor, which returns null.

            Thanks.

            WBR,
            Alexey.


            On Nov 28, 2008, at 20:30 , Survivant 00 wrote:


              I'm doing a a test with breakpoint. The client send requests to the server and after few seconds the client close the connection.

              I receive this error in the console of my server.

              2008-11-28 14:25:36 com.sun.grizzly.util.WorkerThreadImpl run
              GRAVE: WorkerThreadImpl unexpected exception:
              java.lang.NullPointerException
                 at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:322)
                 at com.sun.grizzly.async.TCPAsyncQueueWriter.doWrite(TCPAsyncQueueWriter.java:88)
                 at com.sun.grizzly.async.AbstractAsyncQueueWriter.doWrite(AbstractAsyncQueueWriter.java:397)
                 at com.sun.grizzly.async.AbstractAsyncQueueWriter.onWrite(AbstractAsyncQueueWriter.java:303)
                 at com.sun.grizzly.async.AsyncQueueWriterContextTask.doCall(AsyncQueueWriterContextTask.java:86)
                 at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:56)
                 at com.sun.grizzly.util.WorkerThreadImpl.processTask(WorkerThreadImpl.java:335)
                 at com.sun.grizzly.util.WorkerThreadImpl.run(WorkerThreadImpl.java:194)


              There is a way to catch this exception ?




            ---------------------------------------------------------------------
            To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net
            For additional commands, e-mail: users-help_at_grizzly.dev.java.net