users@grizzly.java.net

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

From: Survivant 00 <survivant00_at_gmail.com>
Date: Mon, 1 Dec 2008 16:03:53 -0500

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