The MINA API was created using Java generics, so it makes extensive use of them in APIs (hiding type information), while the other 2 doesn't care much about it. So if you like to know what's happening under the hood, MINA would be much more explanatory than others.
Mina has an extension mechanism similar to Spring allowing one to plug-in and inject components at runtime: This means you can change MINA's behaviour without touching the code.
It has a component factory mechanism which helps you build applications with event driven architecture, setting up interrupt processing threads and I/O management operations. - The framework is 100% non blocking (i.e. no callbacks). This is made possible using continuations , co-routines and promises . The result? High performance even for CPU intensive applications.
You can use it asynchronously or synchronously via thread pools - Threading support: MINA supports various threading models, such as Java 5 (aka 1.5), Java 6 (aka 1.6) and Java 7 (aka 1.7). So you can mix and match the different models in your application, making it run on any OS out there.
There are already bindings for four scripting languages (Python, PHP, Ruby, Javascript) so you can use them with MINA without much effort.
It's not just an evented framework but an asynchronous one too which means that IO operations or disk accesses will occur in parallel. Which is handy for applications doing I/O intensive work. - Event driven programming model makes reasoning about code easier than threading based ones (you don't have to worry about locking mechanisms etc.), while at the same time performance is higher than threaded implementations using wait queues . - You can also use it for other non-I/O intensive applications.
You can use it to create web servers (i.e. the Jetty binding allows you to do it). - Security: It has support for SSL, self signed certificate generation and handshake, as well as server certificate validation.
Development process is simpler since it uses Maven; So assuming you're using Maven in your projects chances are that you already know how to use MINA too. --- Some of what MINA can be used for include:- - Web servers . As mentioned above, there's already bindings for Jetty so writing a web server with MINA is pretty simple yet powerful due to the lower level API exposed by the framework which means one can achieve high performance without having to use proprietary libraries. Writing RESTful web servers has never been easier with MINA . - Servers in general : Want to write your own HTTP server? Or maybe write your own email server using Mina? It's possible with MINA (although it also supports JDK 1.5, you can still use the Reactor pattern and code it in a synchronous way instead of being forced to do asynchronous programming).