Not sure why I took so long to source a networking library for use at work. I've already wasted so many hours dealing with packet fragmentation, socket handling, and assorted bugs. (TCP isn't a great protocol for sending messages. I await SCTP adoption eagerly.)
Not only fragmentation, but dealing with simple stuff like reading and writing using Java NIO. ByteBuffer is oddly a hard class to use. Something about having to flip it around and whatnot. It's also fixed length buffer, which makes it pretty much inappropriate for serializing a variable length message.
I went with JBoss Netty on a project which handles framing, has a nice replacement for ByteBuffer, and a pretty simple and elegant architecture as well. And I managed to implement a replacement for an old bit of code in about two, three hours, just following the surprisingly good documentation and examples.
There are a couple of things to keep in mind. One is that all reads/writes are asynchronous and even closing the connection is asynchronous. Thus, you need to pay attention with the ordering.
Competing products Grizzly and MINA don't seem to be as simple or have the above features.