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