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
>
>
>