Project loom looks very promising:
http://cr.openjdk.java.net/~rpressler/loom/loom/sol1_part1.html
River uses a lot of threads, many block waiting for network responses...
Virtual Threads could help significantly with salability.
Something else I've thought about in the past is Pack200, since this was
introduced in Java 5, it was never part of Jini, however is anyone aware
of it having been used to reduce downloads? Incidentally it's been
removed from Java since 14 I think.
While focused on using River on the Internet, one of the considerations
I had was remote endpoint identity. I had realised that multiple
parties would be involved and it could cause problems if different
parties shared the same identity locally, incidentally River grants
permission based on a ClassLoader for a service proxy, so a second party
might be able to obtain access to private state as well as the
permissions and identity of another service, simply by using the same
codebase annotation.
When I wrote AtomicILFactory, I made sure that ObjectEndpoint was part
of the identity in addition to the codebase annotation. Of course it
works a little different than other AbstractILFactory instances, rather
than encoding the codebase annotation into the stream, the
ServerEndpoint is contacted, authenticated, the codebase annotation is
requested from the server and a ClassLoader created specifically for the
service's identity (It can be effectively treated as the server's
Principal), then the service proxy is deserialized into it. This
addresses some codebase annotation loss issues identified by Warres et
al and a service can change it's codebase annotation, the next time a
service is deserialized, it will use the latest codebase annotation.
N.B. How a ClassLoader is assigned is extensible if required, eg OSGi.
Cheers,
Peter.