[
https://issues.apache.org/jira/browse/DIRMINA-684?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12697520#action_12697520
]
David Rosenstrauch commented on DIRMINA-684:
--------------------------------------------
> First of all, adding a (reading) thread pool/executor filter before codec
> filter is a really bad idea!
Not sure I understand. Why is that a problem? My intention is to have a pool
of threads reading messages and then feeding them to the codec filter for
processing. Similarly, I have a pool of threads handling writes back out to
the socket. Why is this setup "a really bad idea"?
> Try moving the reading executor behind the codec and remove the writing one.
Again, 1) why should the read executor be behind the codec?, and 2) why should
I remove the writing thread pool?
AFA the bug I posted about:
> Second, the exception should not be problematic, since the session is already
> closed at that time. A "WriteToClosedSessionException" should be more
> appropriate.
> The null pointer seems to result from disposed/disposing filter chain while
> still trying to de-/encode data, maybe ProtocolCodecFactory needs some Locks
> and/or null checks?.
No idea what the problem is that's throwing NPE's, but I would think that MINA
shouldn't be doing it.
> NullPointerException when opening socket to localhost
> -----------------------------------------------------
>
> Key: DIRMINA-684
> URL: https://issues.apache.org/jira/browse/DIRMINA-684
> Project: MINA
> Issue Type: Bug
> Affects Versions: 2.0.0-M4
> Environment: Linux
> Reporter: David Rosenstrauch
> Priority: Minor
>
> I have a MINA-based server I've written that's up and running and works fine.
> I recently added a new bit of functionality to it, however, and it's now
> throwing NullPointerExceptions intermittently.
> The server uses a text-based protocol (using TextLineCodecFactory). I've
> added the capability to give the server a command line parm which is the name
> of a text file, containing startup commands that the server should execute
> after it starts up. I'm doing this by having the server open a java socket
> to the server's port on localhost, read the text file and write (and flush)
> each command out to the socket.
> This is generally working, and the server is receiving and processing each
> command (not always in the order sent, but I'm guessing that's an outgrowth
> of my using a thread pool, and that's not a problem anyway). But from time to
> time, the server is spitting out this error:
> SEVERE: EXCEPTION :
> org.apache.mina.filter.codec.ProtocolEncoderException:
> java.lang.NullPointerException
> at
> org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:312)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:506)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1400(DefaultIoFilterChain.java:48)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:814)
> at
> org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:65)
> at org.apache.mina.core.session.IoEvent.run(IoEvent.java:64)
> at
> org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:552)
> at
> org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:544)
> at
> org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:488)
> at java.lang.Thread.run(Thread.java:619)
> Caused by: java.lang.NullPointerException
> at
> org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:297)
> ... 9 more
> Or sometimes another similar error as well:
> SEVERE: Error occurred during message handling
> org.apache.mina.filter.codec.ProtocolDecoderException:
> java.lang.NullPointerException (Hexdump: 68 65 6C 70 0A 73 74 61 74 73 0A 71
> 75 65 72 79 20 31 32 33 34 0A)
> at
> org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:234)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:48)
> at
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:802)
> at
> org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:59)
> at org.apache.mina.core.session.IoEvent.run(IoEvent.java:64)
> at
> org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:552)
> at
> org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:544)
> at
> org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:488)
> at java.lang.Thread.run(Thread.java:619)
> Caused by: java.lang.NullPointerException
> at
> org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:224)
> ... 9 more
> Noteworthy aspects of my configuration:
> * using the M4 release of MINA
> * I'm not pausing between sending commands; i.e., I'm write and flushing them
> down the socket as quickly as Java can send them
> * I'm using both a read and a write thread pool
> * building my filter chain as follows:
> protocolAcceptor = new NioSocketAcceptor();
> protocolAcceptor.setDefaultLocalAddress(new
> InetSocketAddress(protocolPort));
> protocolAcceptor.setReuseAddress(true);
> DefaultIoFilterChainBuilder filterChainBuilder =
> protocolAcceptor.getFilterChain();
> filterChainBuilder.addLast("logger", new
> LoggingFilter(ProfileCacheServer.class));
> readerThreadPool = new OrderedThreadPoolExecutor();
> filterChainBuilder.addLast("readExecutor", new
> ExecutorFilter(readerThreadPool, IoEventType.MESSAGE_RECEIVED));
> filterChainBuilder.addLast("codec", new ProtocolCodecFilter(new
> TextLineCodecFactory(ParseConstants.UTF8_CHARSET)));
> writerThreadPool = new OrderedThreadPoolExecutor();
> filterChainBuilder.addLast("writeExecutor", new
> ExecutorFilter(writerThreadPool, IoEventType.WRITE));
> protocolAcceptor.setHandler(protocolHandler);
> I actually did find a way to "fix" this problem but someone on the mailing
> list suggested that MINA shouldn't be throwing NPE's regardless. Fix is as
> follows: I was originally just dropping the connection on the client side
> when I was finished. But after changing my code to issue a proper "close
> connection" command to the server before disconnecting, it looks like the
> NPE's go away.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.