The Jini 2.0 software includes the ability to use NIO in the TCP endpoint. This
is activated by system property "com.sun.jini.jeri.tcp.useNIO". If you look at
TcpEndpoint and TcpServerEndpoint, you'll not find much different going on. The
biggest issue with a typical network "distributed" system, is circular wait that
can occur as systems "randomly" develop new connections to other system. Using
a single thread to dispatch events in a server for "load handling" is not a good
thing for any "work" that can have "external" contact. So, the use of NIO for
"scalability" is find for things that don't end up interacting circularly. For
things that you have no idea how they will interact, it's better to make sure
that you have "new inbound call == new inbound thread" so that you don't get
into problems. It may be that there is some work that you can do in a single
thread, but that usually is something that a specific application optimizes.
One way to do that is to use inbound calls to "queue" work. But then you need
to use "callbacks" to notify the caller of the results of there request, unless
you design a very custom invocation layer that allows the use of a "Future" or
some other "signaling" mechanism to control when the result is sent back to the
caller.
Gregg Wonderly
Elijah Menifee wrote:
I myself have started to play with NIO for prototyping a replacement server
system for my company's software. While doing research on how to obtain
SSL/TLS connections on top of the NIO framework I came across Project
Grizzly <https://grizzly.dev.java.net/> which is a sub component of the new
GlassFish server, as such it is dual licensed under CDDLv1 and GPLv2
(ClassPath exception for some parts listed at bottom of GlassFish
license<https://glassfish.dev.java.net/public/CDDL+GPL.html>
).
IANAL so I do not know if it is license compatible or not. If it is it may
provide a good frame work for a low level threaded NIO server to implement
Jini protocols on top of. My understanding is that there has been work done
to get its transport layer to work for the Glassfish ORB. This includes
IIOP, not sure if it also includes RMI-IIOP, or how hard it would be to get
the RMI-IIOP on top of their IIOP transport layer. ( I found this info
at Grizzly
Terminology Blog<http://blogs.sun.com/harshag/entry/grizzly_1_7_0_terminology>).
I am currently evaulating it as a base server to implement my
company's
protocols on top of. Also it has been a while since I worked with Jini
technology (1.2.1), I assume it still uses RMI, and do not know if it was
ever changed to support RMI-IIOP....But from what I have read it should be
possible to implement custom protocols on top of Grizzly transport layer.
Although it has been fun learning the NIO framework, and building a basic
threaded high-performance server has been a learning experience I am still
only prototyping the next revision of our software. If I can get Grizzly to
work with its SSL layer and worker thread management running our async
protocol and business logic I plan to pitch it to the other owners as the
technology to use for the next major rewrite. I believe it would be a better
solution than us maintaining our own low-level threaded NIO server, thus we
only would have to maintain our protocol, business-logic, and presentation
layers...
P.S. According to the FSF GPLv3 is license compatible with the v2 Apache
License, so if the Kerberos stuff can be upgraded to GPLv3 ( sometimes the
license on software states or a later version..., or if they choose to
relicense it under GPLv3) it should be compatable.
On Fri, Jul 3, 2009 at 11:41 PM, Peter Firmstone <[email protected]> wrote:
...
After that I'd like to play around with NIO and DEFLATE compression for
serialization and http classserver performance improvements.
I recently stumbled across a complete Java implementation of Kerberos
Server and client software, I'm thinking there may be benefits for River
running with a default authorisation setup, however it's GPL2, so I'd have
to ask if it can be relicensed first.
Cheers,